FluentNHibernate HasManyToMany条件映射

时间:2009-12-14 08:45:58

标签: fluent-nhibernate nhibernate-mapping conditional

有没有办法过滤掉HasManyToMany映射中的行?

我有三个表(遗留,无法更改它们)Service,Resource和ResourceService。 ResourceService允许多个资源链接到多个服务,但它也有一个“活动”列。

在我的资源域对象上,我使用“ProvidedBy”属性映射链接到资源的服务,该属性返回服务数组。问题是我只想要标记为活动的服务中的行。

我错过了一些基本的东西吗?

3 个答案:

答案 0 :(得分:4)

Fluent NHibernate 1.0版不支持NHibernate过滤器或filter-defs。我向James Gregory和团队提交了一个补丁,他们现在已经将它们整合到了主干中,所以如果你得到主干而不是发布版本,你就会发现能够做到这一点。

基本上,您可以设置一个继承自FilterDefinition的类,如下所示:

public class TestFilter : FilterDefinition
{
    public TestFilter()
    {
        WithName("test")
            .WithCondition("Age > :age")
            .AddParameter("age", NHibernateUtil.Int32);
    }
}

然后在您的流畅映射中应用此过滤器:

HasManyToMany(x => x.Oldies)
    .Table("People")
    .ApplyFilter<TestFilter>();

您可以设置参数值并使用会话对象正常启用过滤器:

session.EnableFilter("test").SetParameter("age", 65);

答案 1 :(得分:0)

这不是Where的候选人吗?

HasManyToMany(x => x.Whatevers)
  .Where(x => x.Active);

答案 2 :(得分:0)

您可以使用过滤器实际实现外连接条件。

请参阅FluentNHibernate HasManyToMany Conditional Mappings