如何使用Nhibernate 3.2按代码映射添加过滤器定义?

New*_*bie 5 c# nhibernate nhibernate-mapping

ModelInspector似乎没有提供定义过滤器定义的方法.任何想法/解决方法?

我需要通过代码生成以下映射:

<filter-def name="filterName" use-many-to-one="false">
  <filter-param name="filterParamName" type="Int32"/>
</filter-def>
Run Code Online (Sandbox Code Playgroud)

Rob*_*ski 9

我能够使用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();
Run Code Online (Sandbox Code Playgroud)

然后在实体映射中定义过滤器:

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

然后按如下方式使用它:

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

我希望你;我觉得这很有用.


小智 6

仅供参考,

重要的是要注意AddFilterDefinition之前的呼叫AddMapping,否则你会得到一个ArgumentException("An item with the same key has already been added")!