簡體   English   中英

如何在 Entity Framework Core 中正確地為具有循環依賴的數據播種?

[英]How do I properly seed data with a circular dependency in Entity Framework Core?

首先,我使用 Entity Framework Core(在 .NET Core 3.1 中)和代碼優先的方法。

想象一下,我有幾個這樣的實體:

public class Employee
{
    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    [ForeignKey(nameof(Department))]
    public int DepartmentId { get; set; }

    public virtual Department Department { get; set; }
}

public class Department
{
    [Key]
    [Required]
    public int Id { get; set; }

    [Required]
    [ForeignKey(nameof(Manager))]
    public int ManagerId { get; set; }

    public virtual Employee Manager { get; set; }
}

每個Employee都屬於一個Department ,每個Department都有一個Employee作為經理的語義。

我想為數據庫播種一些值,比如公司的“CEO”將屬於他應該擔任經理的“方向”部門; 但是,當我嘗試執行此操作時,我遇到了錯誤。

在使用ModelBuilder實例為數據庫播種時,我可以做些什么來同時插入EmployeeDepartment 我知道有一種方法可以禁用外鍵約束,但由於這是代碼優先,我不知道該怎么做。

提前致謝。

這與您是否在播種中添加數據幾乎無關。 如果 SaveChanges 無法在 INSERT、UPDATE 和 DELETE 語句序列中應用請求的更改,它將引發異常。 在這里,如果您添加一個新的部門和經理,其中經理在部門中並且是其經理,則不能插入任何實體。

通常,您只需將部門設置為可選的經理即可。 畢竟,如果部門經理辭職會怎樣? 該部門可能有一段時間沒有經理是有道理的,即使在它成立之后也是如此。 所以添加新的部門,SaveChanges(),將新的Manger 添加到部門,SaveChanges()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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