0

大家好我有一个问题我会尽快描述在我们的应用程序中,我们使用 Nhibernate 作为 ORM,并使用 Fluent Nhibernate 进行映射,并为实体实现了软删除,这意味着实体不会为数据库物理删除它只是使用值设置属性 DeletedBy 和 DeletedDate。问题是当实体加载延迟加载时,软删除实体也会加载。加载实体后,我需要在调用此实体的代码中的每个位置过滤 DeletedDate 为空的位置,但这并不好。

一般如何通过延迟加载软删除来解决所有实体的这个问题?

你能帮助我吗?

提前致谢!

4

2 回答 2

3

使用流利的 Nhibernate 映射,问题在子集合映射的类映射中以下列方式解决,需要添加以下语句

.Where("DeletedDate is null")

例子

 HasMany(x => x.Registrations).Where("DeletedDate is null").KeyColumn("qualificationEnrolmentId").Inverse().Cascade.AllDeleteOrphan();

方法 Where 已经用 LINQ 表达式覆盖,但在这种情况下这不起作用

Where(x=>x.DeletedDate == null)

此代码不起作用,因为 lambda 表达式中的 x 被识别为父实体和其他覆盖参数 SQL 查询而不是 HQL 中接受的方法。

于 2011-08-01T13:27:53.477 回答
2

我没有使用 Fluent-Hibernate,所以不确定它是否适合您,但适用于经典的 NHibernate:

在 HBM 类映射文件中放置一个 where 子句:

<class  name="Class_Type" table="Entity_Table" where="DeletedBy is null" >
...
</class>

只返回那些没有为每个请求逻辑删除的实体

于 2011-08-01T12:26:30.530 回答