NHibernate - Filtered ManyToMany关系返回空记录

时间:2013-01-09 14:19:21

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

我有两个通过多对多关系连接的实体(作业和位置)。 最近我们在Location实体上实现了软删除逻辑,然后在作业映射上添加了一个过滤器,如下所示:

HasManyToMany(x => x.Locations)
.Table("JobLocation")
.ParentKeyColumn("JobId")
.ChildKeyColumn("LocationId")
.ApplyChildFilter<ExcludeDeletedFilter>("IsDeleted = :condition")
.Cascade.None();

多对多关系的查询如下所示

select ... 
from Job job
left outer join JobLocation jl
on jl.JobId = job.Id
left outer join Location loc
on loc.Id = jl.LocationId and IsDeleted = 0

现在的问题是,在获取具有一些已删除位置的作业时,作业实体上的Locations集合包含每个已删除位置的空条目。

通过多对多关系获取此软删除记录时,处理此软删除记录的最佳方法是什么。 (对于一对多,这个过滤器做得很好)

我应该考虑采取哪些其他替代方案?

1 个答案:

答案 0 :(得分:1)

列表中的项目与索引相关联。当使用列表样式映射保留时,这些索引将被保留(列表通常不会突然重新排列)。

如果过滤某些项目,为了使可见项目具有稳定的位置,隐藏元素必须为空项目。

考虑使用不同的映射,例如集合,包或地图。