2012-08-01 100 views
2

我有一个类似于下面例子的多对多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) 

希望它是有道理的,任何指针将是最受欢迎的。

回答

2

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

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在保存更改方法中设置已删除的值。

+0

是的这是唯一的方法,我发现要做到这一点 – 2012-08-01 03:50:38

+0

嗯,好吧,所以只是为了我的理解,所以我可以映射这个。域模型关系看起来像KRA.KRAKPI.KPIs.FirstOrDefault()。名称以前我有KRA.KPIs.FirstOrDefault()。Name?感谢您的回复 – Christo 2012-08-01 05:27:45

+0

是的..我认为这样:( – 2012-08-01 05:32:28