大家好我有问题我会尽快描述 在我们的应用程序中,我们使用Nhibernate作为ORM,使用Fluent Nhibernate进行映射, 并实现了对实体的软删除 实体不会为数据库物理删除它只是将属性DeletedBy和DeletedDate设置为值。 问题是,当实体加载了延迟加载时,软删除的实体也会加载。加载实体后,我需要在调用此实体的代码中的每个位置过滤DeletedDate为null的位置,但这不是很好。
如何解决所有实体在延迟加载时删除此问题的问题?
你能帮助我吗?
提前致谢!
答案 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>
仅返回那些未针对每个请求进行逻辑删除的实体