2011-09-01 123 views
0

我需要这个简单的语句添加到每个SQL查询,每个表:实体框架,已删除= 0

WHERE删除= 0

有没有这样做的任何简单的方法?我的意思是我需要过滤所有记录,最好是在edmx文件中。

+0

@Darin我有一个而不是dlete触发器,将删除设置为1.所以现在我只需要筛选记录不包括删除记录。 – user194076

+0

你有没有考虑过仅仅使用这个视图? – Gabe

回答

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(); 
} 
+0

+1非常有用的想法。 –

+0

@Joe伊诺斯 - 可以只是做 context.Foos.SingleOrDefault(F => f.Id == 1); 而不是 context.Foos.Where(f => f.Id == 1).SingleOrDefault(); –

+0

@ Cubicle.Jockey好的呼叫。我通常使用'.Where'方法,即使它不是必需的,因为它更容易修改(添加更多的Where,OrderBy等等),但这是一种非常常见的情况,会更干净。 –

0

您必须在您从EntityFramework获得结果时执行此操作。

例子:

IEnumerable<TableEntity> filteredResults = TableEntityName.Where(t => t.Delete = 0); 
+0

-1绝对有选择保持这种干爽。 –

2

的唯一可靠方法,以确保Deleted = 0用于总是(包括延迟加载,显式加载和渴望加载)使用Conditional mapping。条件映射的缺点是Deleted列在entity = Delete操作中不可用,该操作将设置此列的列必须映射到存储过程。