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)
我能够使用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")!
| 归档时间: |
|
| 查看次数: |
2418 次 |
| 最近记录: |