我有一個在實體框架配置組合鍵在3個表之間的代碼第一種方法有點問題。我有一個基類,它有我的所有類繼承的Id。第一個表具有第二個表項的集合,而第三個表具有第三個表的集合。從兩個表中刪除元素時,我需要複合鍵級聯刪除。我也在使用聚合根模式。實體框架多個複合鍵,級聯刪除
public abstract class BaseClass
{
[Key, Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
}
public class Table1 : BaseClass
{
public virtual ICollection<Table2> Table2Collection { get; set; }
public string Name { get; set; }
}
public class Table2 : BaseClass
{
public Table1 Table1 {get; set;}
[Key, ForeignKey("Table1"), Column(Order=1)]
public long Table1ID { get; set; }
public virtual ICollection<Table3> Table3Collection { get; set; }
public string Name { get; set; }
}
public class Table3 : BaseClass
{
[Key, ForeignKey("Table2Id,Table1Id"), Column(Order = 1)]
public Table2 Table2 { get; set; }
public long Table2Id{ get; set; }
public long Table1Id{ get; set; }
public string Name { get; set; }
}
上面的代碼工作正常,當我刪除任何類型表1表2或的元素,但它不會讓我刪除從表3給了我以下異常的元素:
「因爲一個或多個外鍵屬性是不可空的,所以不能更改關係。當對關係進行更改時,相關外鍵屬性設置爲空值,如果外鍵不支持空值,必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。「
貝婁是我的模型構造器:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Table2>()
.HasRequired(x=>x.Table1)
.WithMany(x =>x.Table2Collection)
.WillCascadeOnDelete(true);
modelBuilder.Entity<Table3>()
.HasRequired(x=>x.Table2)
.WithMany(x =>x.Table3Collection)
.WillCascadeOnDelete(true);
}
我懷疑我可能沒有正確配置模型構建器,但我似乎無法弄清楚如何將其配置爲允許刪除的元素鍵入Table3。任何幫助,將不勝感激。