删除= 0的实体框架

本文关键字:实体 框架 删除 | 更新日期: 2023-09-27 18:07:30

我需要将这个简单语句添加到每个SQL查询中,每个表:

WHERE Deleted = 0

有什么简单的方法吗?我的意思是我需要过滤所有记录,最好是在edmx文件中。

删除= 0的实体框架

听起来像是要在默认情况下为对象集添加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);