我有一个在映射级别过滤的集合,使用数据库中的“isDeleted”列启用软删除。
映射如下所示:
HasMany(x => x.UploadedFiles).Where("IsDeleted = 0")
当我为某些项设置isDeleted属性时,在我重新加载实体之前,集合不会自动刷新以反映删除。
有没有办法强制“重新过滤”而不重新加载实体?
答案 0 :(得分:2)
映射中的Where子句用于在获取期间进行过滤。它不是在运行时使用,这就是为什么当你设置IsDeleted = true时你没有看到UploadedFiles从你的集合中删除。我不相信可以在不重新加载拥有它的实体的情况下刷新集合。
我建议您在对象模型中表达您的意图。
private IList<File> uploadedFiles = new List<File();
public virtual IEnumerable<File> UploadedFiles {
get {
return uploadedFiles.Where(x => x.IsDeleted == false);
}
}
然后修改您的映射以访问您的支持字段......
HasMany(x => x.UploadedFiles)
.Access.CamelCaseField()
.Where("IsDeleted = 0")