EF6多对多,WillCascadeOnDelete和多个级联路径

时间:2014-10-15 09:29:11

标签: c# .net entity-framework database-design

在EF6 CodeFirst中,我想模拟导航属性的多对多关系。

课程:

public class Event
{
    [DataMember]
    [Required]
    public int Id { get; set; }

    // Other properties

    [DataMember]
    public virtual ICollection<Notification> Notifications { get; set; }
}

public class Notification
{
    [DataMember]
    [Required]
    public int Id { get; set; }

    // Other properties

    [DataMember]
    public virtual ICollection<Event> Events { get; set; }
}

class EventConfiguration : EntityTypeConfiguration<Event>
{
    public EventConfiguration()
    {
        HasMany(e => e.Notifications)
            .WithMany(e => e.Events)
            .Map(m => m.ToTable("NotificationEvents"));
    }
}

其他表上的EventNotification 都有级联删除。

如果我尝试创建数据库,我会得到:

  

引入FOREIGN KEY约束   表上的'FK_dbo.NotificationEvents_dbo.Events_Event_Id'   'NotificationEvents'可能会导致循环或多个级联路径。   指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他   FOREIGN KEY约束。

考虑到其他级联,这是公平的。现在我的问题是:如何(或者我可以)在此关系的一方或双方上仅指定级联

如果我添加(如另一篇文章所示):

class NotificationConfiguration : EntityTypeConfiguration<Notification>
{
    public NotificationConfiguration()
    {
        HasOptional(e => e.Events).WithMany().WillCascadeOnDelete(false);
    }
}

我明白了:

  

在类型上声明的导航属性“Events”   '通知'已配置   冲突的多重性。

0 个答案:

没有答案