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

Dre*_*vak 21 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> 
Run Code Online (Sandbox Code Playgroud)

sni*_*ker 60

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

首先创建一个继承自FluentNHibernate.Mapping.FilterDefinition以下的类:

using FluentNHibernate.Mapping;

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

在类的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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

session.EnableFilter("PonyConditionFilter").SetParameter("condition","Wonderful");
Run Code Online (Sandbox Code Playgroud)


Dav*_*d M 9

如果有人还在看这个,我刚刚提交了一个关于Fluent NHibernate的Google代码的补丁来支持过滤器.你可以在上面的snicker的答案中看到它正在使用中.


Jam*_*Ide 6

最近在Fluent NHibernate讨论中的帖子让我相信Fluent API尚不支持过滤器.

  • Downvoted,因为后来回答时不支持的功能得到支持?那很苛刻. (3认同)