[英]Cascade delete with optional records in Entity Framework
我正在嘗試使用Entity Framework開發ASP.net MVC應用程序,並且在最后大約8個小時內,我試圖修復某些問題而沒有成功。 我有3個模型,“ Overhour
,“ Accounting
和“ Vacation
。 Overhour
是父模型,一旦創建了Overhour
,就可以一次創建一個Accounting
或Vacation
記錄。 我們不需要創建一個,因此我們可以在沒有Accounting
或Vacation
情況下進行Overhour
。 重要的是,當我們刪除Overhour
,應該同時刪除Accountings
和Vacations
(如果存在)。
我首先使用代碼,我使用數據注釋進行了嘗試,但是似乎您無法使用可選模型來做到這一點,因此現在使用Fluent Api。 這是我用於Overhour
和Accounting
之間的關系的東西:
modelBuilder.Entity<Overhour>()
.HasOptional<Accounting>(s => s.Accounting)
.WithOptionalPrincipal()
.WillCascadeOnDelete(true);
即使我使用CodeFirst,我也使用插件創建用於測試目的的模型圖,並且模型看起來也很好(我猜):
圖 (似乎我不能直接包含圖像)
據我了解,它說“ Cascade on End1Delete”。 因此,當我刪除Overhour
,會計記錄也應被刪除,但它不起作用,它只是將其設置為null。
另一件事是,我不確定哪個是父母。 我的意思是,我應該有一個這樣的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; }
}
也許我需要兩者都做?
我很困惑,有什么想法嗎?
謝謝
我能夠使用可選記錄進行級聯刪除,以使用此記錄進行工作:
public class Overhour
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual Guid Id { get; set; }
}
public class Accounting
{
[ForeignKey("Overhour")]
public virtual Guid Id { get; set; }
public virtual Overhour Overhour { get; set; }
}
public class Vacation
{
[ForeignKey("Overhour")]
public virtual Guid Id { get; set; }
public virtual Overhour Overhour { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Accounting>()
.HasRequired(accounting => accounting.Overhour)
.WithOptional()
.WillCascadeOnDelete(true);
modelBuilder.Entity<Vacation>()
.HasRequired(vacation => vacation.Overhour)
.WithOptional()
.WillCascadeOnDelete(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.