刷新在映射中过滤的集合

时间:2010-11-23 13:14:13

标签: nhibernate fluent-nhibernate

我有一个在映射级别过滤的集合,使用数据库中的“isDeleted”列启用软删除。

映射如下所示:

HasMany(x => x.UploadedFiles).Where("IsDeleted = 0")

当我为某些项设置isDeleted属性时,在我重新加载实体之前,集合不会自动刷新以反映删除。

有没有办法强制“重新过滤”而不重新加载实体?

1 个答案:

答案 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")