Pet*_*lor 1 nhibernate nhibernate-configuration
我正在尝试在NHibernate中使用全局过滤器,据我所知,我正在完成所有教程所做的事情,但我得到了一个例外.
我的.hbm.xml文件包含以下内容:
...
<class name="NHibernateSandbox.Foo, NHibernateSandbox" table="Foo">
...
<property column="Content" type="String" name="Content" not-null="true" length="100" />
<property column="Deleted" type="Boolean" name="Deleted" not-null="true" />
<filter name="Foo_Nondeleted" condition="Deleted = false" />
</class>
Run Code Online (Sandbox Code Playgroud)
然后我有一个简单的测试类:
Configuration cfg = new Configuration();
cfg.Configure();
using (ISessionFactory sf = cfg.BuildSessionFactory()) {
using (ISession session = sf.OpenSession()) {
session.EnableFilter("Foo_Nondeleted");
IQuery query = session.CreateQuery("FROM NHibernateSandbox.Foo");
foreach (Foo foo in query.List<Foo>()) {
Console.WriteLine(foo.Content);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除EnableFilter
它按预期工作的行:打印已删除和未删除的行.但是,有了这EnableFilter
行,我得到了一个NHibernateException
No such filter configured [Foo_Nondeleted]
at NHibernate.Impl.SessionFactoryImpl.GetFilterDefinition(String filterName)
at NHibernate.Impl.SessionImpl.EnableFilter(String filterName)
at NHibernateSandbox.Program.Main(String[] args)
Run Code Online (Sandbox Code Playgroud)
如果我将log4net配置为详细,那么我明白了
INFO NHibernate.Cfg.HbmBinder - Mapping class: NHibernateSandbox.Foo -> Foo
DEBUG NHibernate.Cfg.HbmBinder - Mapped property: Id -> RID, type: Int32
DEBUG NHibernate.Cfg.HbmBinder - Mapped property: Content -> Content, type: String
DEBUG NHibernate.Cfg.HbmBinder - Mapped property: Deleted -> Deleted, type: Boolean
DEBUG NHibernate.Cfg.HbmBinder - Applying filter [Foo_Nondeleted] as [Deleted = false]
Run Code Online (Sandbox Code Playgroud)
它"应用过滤器"和过滤器被"配置"并可用于会话之间缺少什么?
在类中添加过滤器是不够的:您还必须定义它.这归结为添加
<filter-def name="Foo_Nondeleted"></filter-def>
Run Code Online (Sandbox Code Playgroud)
到.hbm.xml文件.请注意,这里有一个问题:虽然教程在课程之前显示它,但它必须放在XML之后,或者你会得到一个XmlSchemaValidationException
.
还需要进行另一个小的更改:即使您可能已query.substitutions
设置为映射false
到0
,但它不适用于过滤条件,因此您必须将过滤器更改为
<filter name="Foo_Nondeleted" condition="Deleted = 0" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1185 次 |
最近记录: |