2011-10-27 57 views

回答

8

我能夠實現,使用NHibernate.Cfg.Configuration:

var cfg = new Configuration(); 

var filterDef = new FilterDefinition(
    "filterName", 
    null, // or your default condition 
    new Dictionary<string, IType> { { "filterParamName", NHibernateUtil.Int32 } }, 
    false); 
cfg.AddFilterDefinition(filterDef); 

// cfg.AddMapping(...) 
// cfg.DataBaseIntegration(...) 

var sessionFactory = cfg.BuildSessionFactory(); 

然後定義在實體映射濾波器:

public class EntityMap : ClassMapping<Entity> 
{ 
    public EntityMap() 
    { 
     Table("Entity"); 
     Filter("filterName", m => m.Condition("FilteredField = :filterParamName")); 
     // remaining mapping 
    } 
} 

然後按如下方式使用它:

using(var session = sessionFactory.OpenSession()) 
{ 
    var filterValue = 123; 
    session 
     .EnableFilter("filterName") 
     .SetParameter("filterParamName", filterValue); 
} 

我希望你能找到這個有用的。

6

僅供參考,

需要注意的是調用AddFilterDefinitionAddMapping之前是很重要的,否則你將得到一個ArgumentException("An item with the same key has already been added")

+0

這使我的一天! –

相關問題