我試圖用實體框架開發ASP.net MVC應用程序,並且在過去大約8小時內,我試圖解決某些問題而沒有成功。我有3個型號,Overhour
,Accounting
和Vacation
。 Overhour
是父模型,一旦我們創建了Overhour
,我們可以創建一個Accounting
或Vacation
記錄一次。我們不需要創建一個,所以我們可以有一個Overhour
而不需要Accounting
或Vacation
。重要的是,當我們刪除Overhour
時,我們應該刪除Accountings
和Vacations
(如果它們存在)。在實體框架中使用可選記錄級聯刪除
我先使用代碼,我試着用數據註解,但它似乎當你不能用可選模型做到這一點,所以我現在使用Fluent Api。下面是我使用關係的Overhour
和Accounting
之間的事:
modelBuilder.Entity<Overhour>()
.HasOptional<Accounting>(s => s.Accounting)
.WithOptionalPrincipal()
.WillCascadeOnDelete(true);
即使我使用CodeFirst,我使用插件來創建用於測試的模型圖和模型看起來也沒關係(我猜):
Diagram(看來我不能直接包含在圖像)
按照我的理解,它「瀑布上End1Delete」說。因此,當我刪除Overhour
時,會計記錄也應該被刪除,但它不起作用,它只是將其設置爲空。
另一件事是,我不知道哪一個是父母。我的意思是,我應該有一個Overhour
模式是這樣的:
class Overhour {
...
public int AccountingId { get; set; }
public virtual Accounting Accounting { get; set; }
}
或者是這樣的:
class Overhour {
...
public virtual Accounting Accounting { get; set; }
}
也許我應該包括這個屬性會計模型?像這樣:
class Accounting {
...
public virtual Overhour Overhour { get; set; }
}
也許我需要兩個都做?
我很困惑,有什麼想法?
感謝
這裏是東西,會計並不需要有一個Overhour記錄。這也是可選的。所以當我嘗試使用你給的代碼時,我得到了一個錯誤,像'級聯外鍵'FK_dbo.Accountings_dbo.Overhours_AccountingId'不能被創建,其中引用列'Accountings.AccountingId'是一個標識列。 – Dolmakalem
根據[this](https://msdn.microsoft.com/en-us/data/jj591620#CascadeDelete),如果外鍵字段爲空,那麼當主體被刪除時,該外鍵的外鍵字段將被設置爲空;該依賴關係不會被刪除。我不知道如何使外鍵字段不可爲空和可選。 – erli
是的,我認爲我想要做的事是不可能的,因爲雙方都是可選的。我會只使用自定義代碼。謝謝。 – Dolmakalem