我需要为每个SQL查询添加这个简单的语句:
WHERE Deleted = 0
有什么简单的方法吗?我的意思是我需要过滤所有记录,最好是在edmx文件中。
答案 0 :(得分:5)
听起来您希望默认情况下向对象集添加WHERE。我不知道你是否可以默认这样做,但我能想到的几个方法是:
1)使用视图为您提供WHERE子句并从视图中构建实体。我从来没有真正做到这一点,所以我不知道视图与EF的效果如何 - 如果你需要回写数据库,这可能不会很好。
2)在EDMX的部分类中创建新属性,例如:
partial class MyEntities
{
public IQueryable<Foo> ActiveFoos
{
return Foos.Where(f => f.Deleted == 0);
}
}
...
using (var context = new MyEntities())
{
var foo = context.ActiveFoos.Where(f => f.Id == 1).SingleOrDefault();
}
3)创建一个子上下文类和new
的属性 - 有点难看,但是一旦它被构建,这对开发人员来说是相当透明的。
public class CustomEntities : MyEntities
{
public new IQueryable<Foo> Foos
{
get { return base.Foos.Where(f => f.Deleted == 0); }
}
}
...
using (var context = new CustomEntities())
{
var foo = context.Foos.Where(f => f.Id == 1).SingleOrDefault();
}
答案 1 :(得分:2)
确保始终使用Deleted = 0
(包括延迟加载,显式加载和预先加载)的唯一可靠方法是使用Conditional mapping。条件映射的缺点是Deleted
列在entity = Delete操作中不可用,该操作设置此列必须映射到存储过程。
答案 2 :(得分:0)
您必须在从EntityFramework获得结果时执行此操作。
示例:
IEnumerable<TableEntity> filteredResults = TableEntityName.Where(t => t.Delete = 0);