实体框架,软删除和查询

时间:2012-01-12 19:39:06

标签: c# asp.net-mvc-3 entity-framework

所以这是我的情况:

我正在使用IsDeleted标志软删除表中的某些行,以便可以保留我的归档数据的跟踪。我是通过覆盖SaveChanges中的ObjectContext语句来完成的。

问题是:如何只选择IsDeleted == false的行,而不必在每个查询中指定&& !IsDeleted

有没有办法直接在我的上下文中指定这个?

TKX!

3 个答案:

答案 0 :(得分:7)

您可以在表格上定义一个视图,然后查询该视图:

CREATE VIEW dbo.ActiveData
AS
  SELECT (list of columns)
  FROM dbo.YourTable
  WHERE IsDeleted = 0

然后在您的EDMX模型中,从ActiveData视图而不是基表中读取数据。

答案 1 :(得分:6)

如果右键单击模型查看器中的EntitySet,然后单击“表映射”,则可以在“添加条件”区域中进行操作。这应该按照你的要求进行,尽管根据marc_s的建议你可能最好使用View。

答案 2 :(得分:1)

这是一个古老的问题,但对于任何新来的人来说。从EF 6开始,你真的应该使用拦截器进行这种类型的查询。它在运行时在SQL查询内部放置一个查询,并根据该标志过滤记录。

有关详细信息,请参阅以下内容:

Soft Deleting Entities using Interceptors