2009-06-06 11 views
20

Sembra che non riesca a trovare la sintassi corretta per definire un filtro nibernato usando Nibernato fluente.Sintassi per definire un filtro NHibernate con Fluent Nhibernate?

Sto cercando di seguire blogpost di questo Ayende:

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

ho definito la formula sulla mia proprietà con .FormulaIs() metodo, ma non riesco a trovare su google come tradurre questa definizione a fluente NHibernate:

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

risposta

6

This recent post nella discussione Fluent NHibernate mi porta a credere che i filtri non sono ancora supportati dalle API Fluent.

+3

Downgot perché una funzione non supportata al momento della risposta è stata successivamente supportata? Questo è duro. –

+0

Concordo sul fatto che un downvote è rigido, ma è comunque consigliabile aggiornare la risposta per prendere nota dello stato corrente del framework. –

9

Nel caso in cui qualcuno lo stia ancora osservando, ho appena inviato una patch sul codice Google per Fluent NHibernate per supportare i filtri. Puoi vederlo in uso nella risposta di snicker qui sopra.

58

Se si crea Fluent dal sorgente, ora è disponibile il supporto per i filtri. Si usano in questo modo:

Innanzitutto creare una classe che eredita da FluentNHibernate.Mapping.FilterDefinition:

using FluentNHibernate.Mapping; 

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

Nella vostra ClassMap per la classe, utilizza il metodo 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"); 
     } 
    } 
} 

quindi aggiungere il filtro per la vostra fluent config:

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

Quindi è possibile accenderlo e disattivato come si farebbe con vaniglia NHibernate:

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

2013 - questo è ora disponibile in FluentNibernate senza generare da fonti. –

+1

Il tuo commento mi ha aiutato molto. Grazie. A proposito, il passaggio per aggiungere il filtro alla tua fluente configurazione non è necessario se c'è già una riga come: . Mappings (m => m.FluentMappings.AddFromAssemblyOf ()) perché Fluent NHibernate "rileva" esso. – iberodev