2009-06-06 5 views
20

Es scheint, dass ich nicht die richtige Syntax finden kann, um einen Nhibernate-Filter mit fließendem Nhibernate zu definieren.Syntax um einen NHibernate Filter mit Fluent Nhibernate zu definieren?

Ich versuche, diesem Blogpost des ayende zu folgen:

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

ich die Formel auf meiner Eigenschaft definiert mit .FormulaIs() Methode kann aber nicht auf Google finden, wie diese Definition übersetzen fließend nhibernate:

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

Antwort

6

This recent post in der Diskussion Fluent NHibernate führt mich zu glauben, dass die Filter sind noch nicht von der Fluent API unterstützt.

+3

downvoted weil eine Funktion, die nicht zum Zeitpunkt der Antwort unterstützt wurde später unterstützt wurde? Das ist hart. –

+0

Ich stimme zu, dass ein Downvote hart ist, aber Sie möchten vielleicht immer noch Ihre Antwort aktualisieren, um den aktuellen Zustand des Frameworks zu notieren. –

9

Falls jemand dies noch sieht, habe ich gerade einen Patch auf Google Code für Fluent NHibernate eingereicht, um Filter zu unterstützen. Du kannst es oben in der Antwort von snicker sehen.

58

Wenn Sie Fluent von der Quelle erstellen, gibt es jetzt Unterstützung für Filter. Sie verwenden sie wie folgt aus:

using FluentNHibernate.Mapping; 

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

In Ihrem ClassMap für Ihre Klasse, verwenden Sie die ApplyFilter Methode:

zuerst eine Klasse von FluentNHibernate.Mapping.FilterDefinition vererben erstellen

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"); 
     } 
    } 
} 

Dann fügen Sie den Filter auf Ihre fließend config:

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

Dann können Sie es einschalten und weg so wie man es mit Vanille NHibernate:

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

2013 - das ist jetzt in fluentNHibernate ohne aus Quellen zu bauen. –

+1

Ihr Kommentar hat mir sehr geholfen. Vielen Dank. Übrigens ist der Schritt zum Hinzufügen des Filters zu Ihrer fließenden Konfiguration nicht notwendig, wenn es bereits eine Zeile wie folgt gibt: .Mappings (m => m.FluentMappings.AddFromAssemblyOf ()) weil Fluent NHibernate wird "erkennen" es. – iberodev