gpt4 book ai didi

.net - 带过滤器的 NHibernate

转载 作者:行者123 更新时间:2023-12-02 09:07:47 25 4
gpt4 key购买 nike

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

我有一个全局过滤器,旨在避免数据库中的软删除,这在我系统的其余部分中运行良好。但是,我们使用的是带有现有“UserBase”表的旧数据库,我们将所需的任何新属性添加到“User”表中并映射我们的 User 类以检索数据来自使用“join”映射的 2 个表 - 这样我们就不会更改现有的“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”映射中使用忽略软删除的 where 子句指定“子选择”,但它似乎被忽略了!?

如果方向正确,我们将不胜感激......

最佳答案

我不确定我是否有答案,只是有解决办法。与其将 User 类映射到 UserBase 表,然后连接到 User 表,不如使用 View 呢?也许您可以在名为 UserView 的数据库中创建一个 View ,其中连接了 UserBaseUser 表,然后映射 User强> 类到该 View 。然后,NHibernate 应像对待任何其他列一样对待 IsDeleted 列,并且过滤器应该起作用。

我想到的另一个选择是将User类的映射从UserBase交换到User。然后,IsDeleted 列将不再位于连接表中,而是位于连接到 User 的主表中。那么,过滤器不适用于连接表的事实就不再重要了。

关于.net - 带过滤器的 NHibernate <Join/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5244152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com