导航属性到软删除的实体

时间:2011-08-12 18:51:50

标签: c# .net entity-framework

我有2个参与者:
我的数据库看起来像是:

Vehicles(Id, VehicleNumber, IsDeleted, WorkerId)   
Workers(Id, Name, Address)

在我的edmx中:

VehicleId: Id, VehicleNumber, IsDeleted, WorkerId, Worker
Workers: Id, Name, Address, VehiclesList

如您所见,Vehicles表包含软删除的行。现在,当我得到id = 2的工人时,我得到了他所有的车辆,包括我软删除的车辆。我怎样才能找回未删除的车辆?

2 个答案:

答案 0 :(得分:3)

严重。 EF对软删除的支持非常有限。实际上唯一的可能性是使用条件映射,其中您明确地硬编码(在运行时无法更改)到您的映射条件,表示您不想加载具有IsDeleted = 0的实体。检查映射详细信息:

enter image description here

但它有非常糟糕的后果:

  • IsDeleted列无法映射 - 它已经在内部定义了映射
  • 即使您想要
  • ,也不能使用您的模型加载软删除的实体

第一个问题可以通过将存储过程映射到Vehicle实体的删除操作来解决,第二个问题可以通过单独的模型来解决,以便审核和检索已删除的实体。

首先,代码不支持条件映射 - 它需要EDMX文件。

答案 1 :(得分:1)

是否启用了延迟加载?然后尝试使用where:

限制结果集
worker.VehiclesList.Where(x=>!x.IsDeleted)

您也可以将条件放入模型中的车辆表格映射isdeleted = false。软删除的车辆根本不会被重新启动