我想構建一個ASP.net MVC應用程序。我無法與數據註釋建立某種關係。實體框架中的多個表的可選關係ASP.net MVC
我有3個表格,,Accountings
,Vacations
。每Overhour
記錄可以有1 Accounting
或Vacation
記錄,但它是可選的。所以,它不需要有一個。這裏是我的Overhour
型號:
public class Overhour
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OverhourId { get; set; }
....
public int? AccountingId { get; set; }
public virtual Accounting Accounting { get; set; }
public int? VacationId { get; set; }
public virtual Vacation Vacation { get; set; }
}
我想要當我刪除我Overhour
記錄都Vacation
和Accounting
記錄中刪除(如果有的話)。當我像這樣使用它時,級聯刪除被禁用。
我嘗試這樣做:
public class Overhour
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OverhourId { get; set; }
....
public virtual Accounting Accounting { get; set; }
public virtual Vacation Vacation { get; set; }
}
級聯刪除的作品,但實體框架創建像「Accounting_AccountingId」領域,也是它成爲必需。這些不應該被要求。
最後一件事我想是這樣的:
public class Overhour
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int OverhourId { get; set; }
....
public int AccountingId { get; set; }
public virtual Accounting Accounting { get; set; }
public int VacationId { get; set; }
public virtual Vacation Vacation { get; set; }
}
但這次它給了我這樣的錯誤:
上表XXX引進國外KEY XXX約束可能會導致循環或多重級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束條件
我很困惑,我做錯了什麼?
謝謝
其實級聯刪除在我的第二個例子中工作。我很困惑。那麼,我應該在我的情況下做什麼?我應該自己刪除相關記錄嗎?因爲當我刪除超時記錄時,我需要刪除會計記錄和假期記錄。 – Dolmakalem
嗯,問題在於你如何對待他們。默認情況下,這將創建一對多,即「Overhour」具有一個「Accounting」,而「Accounting」具有許多「Overhour」。這就是爲什麼它不會在這種情況下刪除「會計」,因爲它可能仍然在這個「Overhour」實例之外有效使用。如果你真的想把'Accounting'綁定到特定的'Overhour'實例,那麼你的關係應該是一對一的。 –
我很迷茫,我想我需要閱讀更多關於Fluent Api的東西。 – Dolmakalem