ModelInspector似乎沒有提供定義過濾器定義的方法。任何想法/解決方法?如何通過代碼添加Nhibernate 3.2映射的過濾器定義?
我需要生成由代碼映射如下:
<filter-def name="filterName" use-many-to-one="false">
<filter-param name="filterParamName" type="Int32"/>
</filter-def>
ModelInspector似乎沒有提供定義過濾器定義的方法。任何想法/解決方法?如何通過代碼添加Nhibernate 3.2映射的過濾器定義?
我需要生成由代碼映射如下:
<filter-def name="filterName" use-many-to-one="false">
<filter-param name="filterParamName" type="Int32"/>
</filter-def>
我能夠實現,使用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);
}
我希望你能找到這個有用的。
僅供參考,
需要注意的是調用AddFilterDefinition
是AddMapping
之前是很重要的,否則你將得到一個ArgumentException("An item with the same key has already been added")
!
這使我的一天! –