使用Fluent Nhibernate定义NHibernatefilter的语法?

看来我无法find正确的语法来定义一个使用stream利Nhibernate的nhibernatefilter。

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

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

我用.FormulaIs()方法在我的属性上定义了公式,但在google上找不到如何将此定义转换为stream畅的nhibernate:

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

这个最近在Fluent NHibernate讨论中的post让我相信Fluent API还不支持filter。

如果您从源代码构buildFluent,现在支持filter。 你使用它们是这样的:

首先创build一个inheritance自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"); } } } 

然后添加filter到你的stream利的configuration:

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

然后,你可以打开和closures,就像你用香草NHibernate:

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

如果有人还在看这个,我刚刚在谷歌代码上提交了一个补丁,用于支持filter。 你可以在上面的snicker的回答中看到它的使用。