使用引用继承属性的lambda在Fluent NHibernate映射中应用过滤器?

时间:2012-03-13 18:33:01

标签: c# fluent-nhibernate mapping

有没有办法在流畅的nhibernate映射文件中指定一种只能有条件地将值拉入业务实体的方法?

我当前的地图代码段是:

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

理想情况下,我想要这个(编译但会抛出gu未定义的运行时错误):

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

问题的关键在于,我希望映射只能删除那些具有空删除日期的组用户条目。

编辑:删除日期在基类

2 个答案:

答案 0 :(得分:2)

来自FluentNhibernate API documentation

  

其中(表达式> where)

     

为此一对多关系设置where子句。注意:这个   只支持简单的情况,使用字符串重载更复杂   条款。

似乎过滤基类属性属于“复杂”案例。

所以你应该使用Where(String)重载(我没有测试过语法......):

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

答案 1 :(得分:1)

我有同样的问题,因为我不相信这应该是一个“复杂”的案例,我最终改变了FluentNH源代码中的一行解决了它。我提出了一个拉取请求但是直到它被合并(或者它根本没有合并)你可以从这里构建它:https://github.com/alexDevBR/fluent-nhibernate/

编辑:它被合并了。