删除= 0的实体框架
本文关键字:实体 框架 删除 | 更新日期: 2023-09-27 18:07:30
我需要将这个简单语句添加到每个SQL查询中,每个表:
WHERE Deleted = 0
有什么简单的方法吗?我的意思是我需要过滤所有记录,最好是在edmx文件中。
听起来像是要在默认情况下为对象集添加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();
}
确保始终使用Deleted = 0
(包括延迟加载,显式加载和即时加载)的唯一可靠方法是使用条件映射。条件映射的缺点是Deleted
列在entity = Delete操作中不可用,该操作将该列设置为必须映射到存储过程
您必须在从EntityFramework获得结果时执行此操作。
的例子:
IEnumerable<TableEntity> filteredResults = TableEntityName.Where(t => t.Delete = 0);