使用Nhibernate延迟加载软删除实体的问题

时间:2011-08-01 11:47:03

标签: c# nhibernate fluent-nhibernate lazy-loading soft-delete

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

如何解决所有实体在延迟加载时删除此问题的问题?

你能帮助我吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

使用流畅的Nhibernate地图,问题就是通过以下方式解决 在子集合映射的类映射中,需要添加以下语句

.Where("DeletedDate is null")

例如

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

方法哪里有使用LINQ表达式覆盖但在这种情况下不起作用

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

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

答案 1 :(得分:2)

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

在HBM类映射文件中,将where子句放在:

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

仅返回那些未针对每个请求进行逻辑删除的实体