Свободный NHibernate - Коллекции не фильтруются - PullRequest
1 голос
/ 27 августа 2010

У меня есть оператор критериев сеанса (Fluent NHibernate), который, кажется, не фильтрует дочернюю коллекцию, даже если у меня определены выражения / ограничения.

ICriteria criteria = session.CreateCriteria(typeof(MyClass));
criteria.CreateAlias("MyCollection", "MC");
criteria.Add(Restriction.Eq("MC.Property", value));
IList<MyClass> list = criteria.List<MyClass>();

Возвращает все объекты типа MyClass, имеющие MyCollection.Property = value, однако MyCollection не фильтруется до MyCollection.Property = value

Похоже, что только корневые объекты фильтруются.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

Это верно, он будет фильтровать только корневую сущность. Если запрос изменил элементы в коллекции корневого объекта, у вас может возникнуть ужасная проблема: если вы снова сохраните объект, элементы, которые были отфильтрованы из коллекции, будут окончательно удалены из объекта! И конечно, никто этого не хочет.

Если вы хотите такое поведение, вам придется делать это вручную (через foreach после загрузки сущностей), хотя я бы не рекомендовал этого по вышеуказанной причине. Мое предложение состоит в том, чтобы сделать объект в коллекции корнем запроса.

2 голосов
/ 27 августа 2010

Я нашел только несколько хитрых ссылок об этом, так что это на ваш страх и риск:).

Кажется, это должно работать, если добавить следующее:

criteria.CreateCriteria("MC", JoinType.LeftOuterJoin);

Я бы не советовал, хотя, согласно ответу Педро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...