所以我正在使用Entity Framework Code First(所以没有.edmx)我有一个带有bool IsEnabled的基本实体类来进行软删除
我正在使用存储库模式,因此可以使用IsEnabled过滤掉针对存储库的所有查询 .
但是,每当我使用存储库获取IsType的IsType时,Lazy Loading MyType.Items可能意味着无法启用Items .
有没有办法,也许用EF Fluent描述如何对表进行过滤?
更新:
如果我有一个Dbset
public class UnitOfWork : DbContext
{
private IDbSet<MyObj> _MyObj;
public IDbSet<MyObj> MyObjs
{
get { return _MyObj ?? (_MyObj = base.Set<MyObj>()); }
}
}
有什么方法可以告诉DbContext过滤DbSet吗?
3 回答
不,没有办法为延迟加载定义过滤器(也不能使用
Include
进行急切加载) . 如果您希望导航集合仅填充IsEnabled
为true
的项目,则只能相应地调整查询,例如使用显式加载:这将仅使用启用的项填充
的
parent
集合 .Edit
我觉得有点像关于失败的战斗的坏消息的使者,他的头被击倒了 . 也许很难相信实体框架有时候没有你想要的功能 . 为了提高我说服你的机会,我添加一个quote from an authority, Julie Lerman:
它看起来仍然有可能 . 如果您有兴趣,可以查看Wiktor Zychla blogpost,在那里他给出了软删除问题的解决方案 .
这http://blogs.claritycon.com/blog/2012/01/25/a-smarter-infrastructure-automatically-filtering-an-ef-4-1-dbset/基本上定义了我如何实现我的目标 .
基本上你创建一个FilteredDbSet并让你所有的DbContext IDbSet返回它 .