.net NHibernate<;加入/>;带过滤器
我希望这个问题有一个简单的答案 我有一个全局过滤器,用于避免数据库中的软删除,这在我的系统的其余部分中运行良好。然而,我们正在使用一个带有现有“UserBase”表的旧数据库,我们需要的任何新属性都添加到一个“User”表中,并映射我们的用户类以使用“join”映射从两个表检索数据-这样我们就不会更改现有的“UserBase”表 同样,在我们尝试将软删除筛选器应用于类之前,这一切都很正常,因为生成的SQL将筛选器应用于没有匹配列的“BaseUser”表.net NHibernate<;加入/>;带过滤器,.net,nhibernate,join,filter,.net,Nhibernate,Join,Filter,我希望这个问题有一个简单的答案 我有一个全局过滤器,用于避免数据库中的软删除,这在我的系统的其余部分中运行良好。然而,我们正在使用一个带有现有“UserBase”表的旧数据库,我们需要的任何新属性都添加到一个“User”表中,并映射我们的用户类以使用“join”映射从两个表检索数据-这样我们就不会更改现有的“UserBase”表 同样,在我们尝试将软删除筛选器应用于类之前,这一切都很正常,因为生成的SQL将筛选器应用于没有匹配列的“BaseUser”表 <class name="User
<class name="User" table="UserBase">
<id name="Id" column="userid" type="Int32" unsaved-value="-1">
<generator class="native">
<param name="sequence"></param>
</generator>
</id>
<property name="Email" column="UserEmail" type="String" length="100" />
.........
.........
<join table="User" optional="false">
<key column="UserID" />
<property name="TimeZone" column="timezone" type="Int32" />
.........
.........
<property name="IsDeleted" column="IsDeleted" type="Boolean" />
</join>
<filter name="AvoidLogicalDeleted" condition="IsDeleted = 0" />
</class>
.........
.........
.........
.........
是否有任何方法可以使筛选器应用于“联接”表而不是类表
我还尝试在“join”映射中指定一个“subselect”,其中where子句忽略软删除,但它似乎被忽略了
如果你能指出正确的方向,我将不胜感激。…我不确定我是否有一个答案,更不确定我是否有一个解决办法。与其将User类映射到UserBase表,然后连接到User表,不如使用视图?也许您可以在数据库中创建一个名为UserView的视图,该视图将UserBase和User表连接起来,然后将User类映射到该视图。然后,NHibernate应像对待任何其他色谱柱一样对待IsDeleted色谱柱,并且过滤器应能工作 我想到的另一个选项是将User类的映射从UserBase交换到User。IsDeleted列将不再位于联接表中,而是位于连接到用户的主表中。那么,过滤器不在联接表上工作这一事实就无关紧要了