Применение фильтра в отображении Fluent NHibernate с использованием лямбда-выражения, ссылающегося на унаследованное свойство? - PullRequest
2 голосов
/ 13 марта 2012

Есть ли способ указать в беглом файле отображения nhibernate способ только условно извлекать значения в бизнес-сущность?

Мой текущий фрагмент кода:

            HasMany(m => m.GroupUsers)
            .Table("GroupUsers")
            .KeyColumns.Add("UserEntityId")
            .Inverse()
            .Cascade.All();

В идеале, я хотел бы иметь это (который компилируется, но выдает ошибку времени выполнения, которая не определена):

            HasMany(m => m.GroupUsers)
            .Table("GroupUsers")
            .KeyColumns.Add("UserEntityId")
            .Where(gu => gu.DeleteDate == null)
            .Inverse()
            .Cascade.All();

Суть проблемы в том, что я хотел бы, чтобы сопоставление только отозвало записи этих групповых пользователей с нулевой датой удаления.

Редактировать: Удалить дату для базового класса

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Из документации FluentNhibernate API :

T Где (Выражение> где)

Устанавливает предложение where для этого отношения один ко многим. Примечание: это поддерживает только простые случаи, используйте перегрузку строки для более сложных статьи.

Кажется, фильтрация по свойствам базового класса относится к "сложным" случаям.

Так что вам следует использовать перегрузку Where(String) (я не проверял синтаксис ...):

HasMany(m => m.GroupUsers)
            .Table("GroupUsers")
            .KeyColumns.Add("UserEntityId")
            .Where("DeleteDate is null")
            .Inverse()
            .Cascade.All();
1 голос
/ 12 июня 2013

У меня была та же проблема, и, поскольку я не верил, что это должен быть "сложный" случай, я закончил тем, что изменил одну строку в исходном коде FluentNH, которая разрешила ее.Я сделал запрос на извлечение, но пока он не будет объединен (или если он вообще не будет объединен), вы можете создать его отсюда: https://github.com/alexDevBR/fluent-nhibernate/

РЕДАКТИРОВАТЬ: он был объединен.

...