【问题标题】:navigation property to soft-deleted entity导航属性到软删除的实体
【发布时间】:2011-08-12 18:51:50
【问题描述】:

我有 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 的 Worker 时,我得到了他所有的车辆,包括我软删除的那辆。如何仅检索未删除的车辆?

【问题讨论】:

    标签: c# .net entity-framework


    【解决方案1】:

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

    但后果很严重:

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

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

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

    【讨论】:

      【解决方案2】:

      是否启用延迟加载?然后尝试使用 where 限制结果集:

      worker.VehiclesList.Where(x=>!x.IsDeleted)
      

      您也可以在模型设计器 isdeleted = false 中为车辆表映射设置条件。软删除的车辆根本不会被检索

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多