entity-framework - Entity Framework 多对多映射上的软删除

标签 entity-framework ef-code-first

我有一个多对多 EF 映射,类似于下面的示例。我使用 EF 代码优先方法,因此我的映射类继承 EntityTypeConfiguration<>。

this.HasMany(a => a.KPIs)
            .WithMany()
            .Map(a =>
            {
                a.ToTable("KeyResultArea_KeyPerformanceIndicator_Mapping");
                a.MapLeftKey("KRA_Id");
                a.MapRightKey("KPI_Id");
            });

因此,我留下了如下所示的架构。

enter image description here

到目前为止还没有什么大惊喜。 - 但是,我希望能够软删除这些映射之一,以便我的所需架构看起来像这样;

dbo.KeyResultArea_KeyPerformanceIndicator_Mapping(
   KRA_Id int,
   KPI_Id int,
   Deleted bit)

希望这是有道理的,非常欢迎任何指点。

最佳答案

我认为您可能需要有自己的逻辑来定义关系的删除。您可以为关系定义新的实体类型,

public class KRAKPI{

public int KPA_Id{get;set;}
public int KRA_Id{get;set;}
public bool IsDeleted{get;set;}

}

然后,您可以通过获取状态管理器中的所有 KRAKPI 已删除项目并通过更改 IsDeleted 值将它们设置为已修改状态来定义保存更改中的删除逻辑。 Here is a post关于在保存更改方法中设置删除的值。

关于entity-framework - Entity Framework 多对多映射上的软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11752265/

相关文章:

entity-framework - 如何在 Entity Framework 中将字段设置为DBNull

c# - 首先通过代码更新具有一对一关系的 ViewModel

c# - Entity Framework 中的 NHibernate 的 SchemaUpdate(代码优先)?

entity-framework - 主键与 Entity Framework Code First 的一对一关系

c# - EF5 Code First - 使用迁移更改列类型

entity-framework-4 - EF4代码优先使表名称单数

c# - 如何通过非主键创建一对一关系(EF First Code)

c# - 存储库不初始化实体数据

c# - 当我映射 ProjectId 属性时,代码首先尝试添加 Project_Id 列

c# - T Get<T>(int id) 和 T Get(int id) 的区别