1

我有两个通过多对多关系连接的实体(工作和位置)。最近我们在 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 集合包含每个已删除位置的空条目。

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

我应该考虑其他哪些选择来做到这一点?

4

1 回答 1

1

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

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

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

于 2013-01-09T16:56:56.167 回答