2011-10-27 13 views
5

ModelInspectorはフィルタ定義を定義する手段を提供していないようです。任意のアイデア/回避策?Nhibernate 3.2のフィルタ定義をコードで追加する方法は?

私はコードでマッピングして、次を生成する必要があります。

<filter-def name="filterName" use-many-to-one="false"> 
    <filter-param name="filterParamName" type="Int32"/> 
</filter-def> 

答えて

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

FYI、

AddFilterDefinitionへの呼び出しがAddMapping前にあることに注意することが重要であるが、そうでなければ、ArgumentException("An item with the same key has already been added")を取得します!

+0

これは私の一日を作った! –

関連する問題