Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NHibernate<;加入/>;带过滤器_.net_Nhibernate_Join_Filter - Fatal编程技术网

.net NHibernate<;加入/>;带过滤器

.net NHibernate<;加入/>;带过滤器,.net,nhibernate,join,filter,.net,Nhibernate,Join,Filter,我希望这个问题有一个简单的答案 我有一个全局过滤器,用于避免数据库中的软删除,这在我的系统的其余部分中运行良好。然而,我们正在使用一个带有现有“UserBase”表的旧数据库,我们需要的任何新属性都添加到一个“User”表中,并映射我们的用户类以使用“join”映射从两个表检索数据-这样我们就不会更改现有的“UserBase”表 同样,在我们尝试将软删除筛选器应用于类之前,这一切都很正常,因为生成的SQL将筛选器应用于没有匹配列的“BaseUser”表 <class name="User

我希望这个问题有一个简单的答案

我有一个全局过滤器,用于避免数据库中的软删除,这在我的系统的其余部分中运行良好。然而,我们正在使用一个带有现有“UserBase”表的旧数据库,我们需要的任何新属性都添加到一个“User”表中,并映射我们的用户类以使用“join”映射从两个表检索数据-这样我们就不会更改现有的“UserBase”表

同样,在我们尝试将软删除筛选器应用于类之前,这一切都很正常,因为生成的SQL将筛选器应用于没有匹配列的“BaseUser”表

 <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列将不再位于联接表中,而是位于连接到用户的主表中。那么,过滤器不在联接表上工作这一事实就无关紧要了