簡體   English   中英

級聯刪除和Entity Framework中的可選記錄

[英]Cascade delete with optional records in Entity Framework

我正在嘗試使用Entity Framework開發ASP.net MVC應用程序,並且在最后大約8個小時內,我試圖修復某些問題而沒有成功。 我有3個模型,“ Overhour ,“ Accounting和“ Vacation Overhour是父模型,一旦創建了Overhour ,就可以一次創建一個AccountingVacation記錄。 我們不需要創建一個,因此我們可以在沒有AccountingVacation情況下進行Overhour 重要的是,當我們刪除Overhour ,應該同時刪除AccountingsVacations (如果存在)。

我首先使用代碼,我使用數據注釋進行了嘗試,但是似乎您無法使用可選模型來做到這一點,因此現在使用Fluent Api。 這是我用於OverhourAccounting之間的關系的東西:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM