我的代碼,第一個實體框架模型如下:多級聯通道實體框架
在我的數據庫我有customers
,purchases
和items
。
- 甲
customer
可具有若干purchases
- 每個
purchase
可以由幾個purchased_item
。 - 每個
purchased_item
參考了一個item
。
所以,用FluentAPI配置我的實體時,我有以下配置:
public class PurchaseConfiguration : EntityTypeConfiguration<Purchase>
{
public PurchaseConfiguration (string schema = "dbo")
{
ToTable(schema + ".Purchase");
HasKey(p => p.PurchaseId);
Property(p => p.Name);
HasMany(p => p.PurchasedItems) //This is an ICollection of PurchaseItem in the Purchase class
.WithRequired(pi => pi.Purchase)
.HasForeignKey(pi => pi.PurchaseId)
.WillCascadeOnDelete(true);
}
}
public class ItemConfiguration : EntityTypeConfiguration<Item>
{
public ItemConfiguration (string schema = "dbo")
{
ToTable(schema + ".Item");
HasKey(i => i.ItemId);
Property(i => i.Name);
HasMany(i => i.PurchasedItems)
.WithRequired(pi => pi.Item)
.HasForeignKey(pi => pi.ItemId)
.WillCascadeOnDelete(true);
}
}
public class PurchasedItemConfiguration : EntityTypeConfiguration<PurchasedItem>
{
public PurchasedItemConfiguration (string schema = "dbo")
{
ToTable(schema + ".PurchasedItem");
HasKey(rp => rp.PurchasedItemId);
}
}
我怎麼想這個表現是,當你在DB擦除purchased item
沒有涉及到任何一個信息purchase
或item
丟失。但是,如果從db中刪除item
或purchase
,則purchaseditem
也會被刪除。
然而,當我嘗試更新我的數據庫,我得到以下異常:
表「PurchasedItem」引進國外KEY約束「FK_dbo.PurchasedItem_dbo.Item_ItemId」可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。
無法創建約束或索引。查看以前的錯誤。
應該工作...你有三個表之間的任何其他關係? – jjj
不,我不知道。唯一的另一種關係是將具有級聯刪除的'customer'設置爲true,這樣當用戶被刪除時,他的所有購買和物品都將被刪除。 –