使用Fluent Nhibernate定义NHibernate过滤器的语法?

时间:2009-06-06 21:49:20

标签: nhibernate fluent-nhibernate

似乎我找不到使用流畅的Nhibernate定义nhibernate过滤器的正确语法。

我正试图关注这个ayende的博文:

http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx

我使用.FormulaIs()方法在我的属性上定义了公式,但在谷歌上找不到如何将此定义翻译为流利的nhibernate:

 < filter-def name='CultureFilter'>
   < filter-param name='CultureId' type='System.Int32'/>
 < /filter-def> 

3 个答案:

答案 0 :(得分:60)

如果您从源代码构建Fluent,则现在支持过滤器。你像这样使用它们:

首先创建一个继承自FluentNHibernate.Mapping.FilterDefinition

的类
using FluentNHibernate.Mapping;

namespace PonyApp.FluentFilters
{
    public class PonyConditionFilter : FilterDefinition
    {
        public PonyConditionFilter()
        {
            WithName("PonyConditionFilter")
                .AddParameter("condition",NHibernate.NHibernateUtil.String);
        }
    }
}

在类的ClassMap中,使用ApplyFilter方法:

namespace PonyApp.Entities.Mappings
{
    public class PonyMap : ClassMap<Pony>
    {
        public PonyMap()
        {
            Id(x => x.Id);
            Map(x => x.PonyName);
            Map(x => x.PonyColor);
            Map(x => x.PonyCondition);
            ApplyFilter<PonyConditionFilter>("PonyCondition = :condition");
        }
    }
}

然后将过滤器添加到您的流畅配置:

Fluently.Configure()
    .Mappings(m => m.FluentMappings.Add(typeof(PonyConditionFilter)))
    //blah blah bunches of other important stuff left out
    .BuildSessionFactory();

然后你可以像使用香草NHibernate一样打开和关闭它:

session.EnableFilter("PonyConditionFilter").SetParameter("condition","Wonderful");

答案 1 :(得分:9)

如果有人还在看这个,我刚刚提交了一个针对Fluent NHibernate的Google代码补丁来支持过滤器。您可以在上面的窃听回答中看到它正在使用中。

答案 2 :(得分:6)

Fluent NHibernate讨论中的

This recent post让我相信Fluent API尚不支持过滤器。