Я создал соглашение Fluent NHibernate, чтобы установить «Присоединение» в качестве режима выборки для всех ассоциаций «многие к одному» (по моему мнению, нет смысла отправлять выборку для выборки 1 записи каждая). Проблема в том, что некоторые объекты имеют огромное количество столбцов (устаревшая база данных), и мне нужно ограничить набор результатов для создаваемого отчета.
Рассмотрим следующий пример:
class X
{
public int Id {get;set;}
public virtual Y RefToY {get;set;}
...
}
class Y
{
public int Id {get;set;}
public virtual Z RefToZ {get;set;}
...
}
class Z
{
public int Id {get;set;}
public virtual String data1 {get;set;}
public virtual String data2 {get;set;}
public virtual String data3 {get;set;}
...
}
Представьте себе, что помимо свойств, которые я показал, у каждого из этих объектов есть еще 200 свойств, каждое из которых сопоставлено со столбцом.
Допустим, отчет, который мне нужно создать, основан на X (что означает, что критерии основаны на X), и мне нужно получить свойство X 'Id' и свойство Z data1 ',' data2 'и' data3 ' показать на DataGrid.
Нет смысла извлекать набор результатов с 600 столбцами, поэтому мне нужно указать с помощью API Criteria, что мне нужны только эти 4 столбца. Как я могу быстро достичь этого? Я попытался установить проекции следующим образом:
var crit = Session.CreateCriteria<X>().SetProjection(Projections.ProjectionList()
.Add(Projections.Property("Id"))
.Add(Projections.Property("RefToY.RefToZ.data1"))
.Add(Projections.Property("RefToY.RefToZ.data2"))
.Add(Projections.Property("RefToY.RefToZ.data3")));
Но это привело к ошибкам, говорящим: "RefToY.RefToZ.data1" ... свойства не существуют. Это привело к моему вопросу. Как я могу добиться этого с помощью API критериев NHibernate?