我有一個用戶類,其中每個用戶可以有多個地址。創建用戶和地址(1多)和訂單和地址(1-1)之間的關係
我也有一個訂單類,其中每個訂單可以只有一個地址。
我有下面的代碼,並得到級聯刪除錯誤,在此之前,我得到了外鍵約束問題,並已修復這些問題。
public class User : IdentityUser
{
public virtual ICollection<Purchase> Purchases { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
public class Order
{
[Key, ForeignKey("User")]
public string OrderId { get; set; }
public virtual User User { get; set; }
[Required, ForeignKey("Address")]
public int AddressId { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<OrderItem> Items { get; set; }
}
public class Address
{
public int Id { get; set; }
[Required]
public string UserId { get; set; }
public User User { get; set; }
}
我不確定什麼現在是錯誤的,我認爲級聯問題是我嘗試實現地址表1-1和1一對多的關係。
確切的錯誤是這樣的:
Introducing FOREIGN KEY constraint
'FK_dbo.Purchases_dbo.AspNetUsers_UserId' on table
'Orders' may cause cycles or multiple cascade paths.
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify
other FOREIGN KEY constraints.
在Visual Studio 2013程序包管理器控制檯執行該語句時,我得到這個錯誤。
'Update-Package -Force'
編輯:
以下@erkaners建議我開始重新考慮這個結構之後。
「用戶」可以擁有任意數量的送貨地址。我們的一些用戶經常運送到多個地址,並且不應該重複輸入這些地址。
'訂單'是正在進行的訂單,客戶選擇他們以前的地址之一或輸入新地址當這個訂單被創建時。
然後我有一個'OrderHistory'的表格,它是完成的訂單。
現在我在想我實際上並沒有想要刪除一個地址,因爲那麼'OrderHistory'表將不能再引用它的地址。
相反,我認爲我應該添加一個布爾列來標記Active/Inactive地址並完全刪除級聯刪除。這是更好的行動方式嗎?
使用繼承'訂單' – renakre
繼承如何幫助順序?最終訂單歷史與訂單完全不同,有些物業不會轉移到歷史記錄,因爲它們只需要預購。 – rbuddicom