所以我首先使用实体框架代码(所以没有.edmx)
我有一个带有 bool IsEnabled 的基实体类来执行软删除
我正在使用存储库模式,因此可以使用 IsEnabled 过滤掉针对存储库的所有查询。
但是,每当我使用存储库获取 IsEnabled 的 MyType 时,延迟加载 MyType.Items 可能意味着无法启用 Items。
有没有一种方法,也许可以使用 EF Fluent 来描述如何对表进行过滤?
Update:
如果我有一个数据库集
public class UnitOfWork : DbContext
{
private IDbSet<MyObj> _MyObj;
public IDbSet<MyObj> MyObjs
{
get { return _MyObj ?? (_MyObj = base.Set<MyObj>()); }
}
}
有什么方法可以告诉 DbContext 过滤 DbSet 吗?
不,没有办法定义延迟加载的过滤器(也不能使用急切加载)Include
)。如果您希望您的导航集合仅填充以下项目IsEnabled
is true
您只能相应地调整查询,例如通过显式加载:
context.Entry(parent).Collection(p => p.Items).Query()
.Where(i => i.IsEnabled)
.Load();
这将填充Items
收集parent
仅适用于已启用的项目。
Edit
我感觉有点像一个失败的战斗的坏消息的使者,他的头被打掉了。也许很难相信实体框架有时没有您想要的功能。为了提高说服你的机会,我添加了一个引用权威人士朱莉·勒曼 (Julie Lerman) 的话:
实体中既不急切加载也不延迟/延迟加载
框架允许您过滤或排序相关数据
回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)