2009-06-06 52 views
20

看來我無法找到正確的語法來定義一個使用流利Nhibernate的nhibernate過濾器。使用Fluent 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> 

回答

6

This recent post在功能NHibernate的討論使我相信,過濾器尚未通過流利的API支持。

+3

Downvoted,因爲在回答時不支持的功能後來被支持了嗎?這太苛刻了。 – 2013-04-18 13:18:17

+0

我同意downvote是苛刻的,但你仍然可能想更新你的答案,注意框架的當前狀態。 – 2014-07-03 15:22:26

9

如果有人仍在觀看此視頻,我剛剛在谷歌代碼上爲Fluent NHibernate提交了一個補丁,以支持過濾器。你可以在上面的snicker的回答中看到它。

58

如果您從源代碼構建Fluent,現在支持過濾器。您可以使用它們像這樣:

首先創建一個類從FluentNHibernate.Mapping.FilterDefinition繼承:

using FluentNHibernate.Mapping; 

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

在你的類映射爲您的類,使用確定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");