簡體   English   中英

EF最佳實踐:使用導航集合與DBSet

[英]EF Best Practices: Using Navigation collection vs DBSet

考慮以下EF代碼優先模式:

class Organization
{
   public int ID { get; set; }
   public ICollection<Employee> Employees { get; set; }
}
class Employee
{
   public int ID { get; set; }
   public Organization Employer { get; set; }
}
class MyDbContext: DbContext
{
   public DBSet<Employee> Employees { get; set; }
   public DBSet<Organization> Organizations  { get; set; }
}

假設我們有一個Organization實例,並且想要添加一個新員工。 我們可以做(A)

organization.Employees.Add(new_guy); 

或(B)

new_guy.Organization = organization;
dbContext.Employees.Add(new_guy);

假設代碼的一部分使用了organization.Employees.Add。 代碼的另一部分引用dbContext.Employees。 然后,dbContext.Employees將不再包含new_guy,因為這兩個集合沒有相互魔術地同步。

當不同的團隊成員使用(A)或(B)時,這可能會很成問題。

這里的最佳做法是什么? 我們應該始終訪問DbSet而不使用導航屬性嗎? 我們應該編寫一個自定義包裝器嗎?

據我了解,您的問題可能是DbContext的生存期。 如果使用的是DI框架,則通常會按請求配置此對象的生存期。

使用溫莎城堡,情況將如下所示:

container.Register(
         Component.For<DbContext>()
        .ImplementedBy<MyDbContext>()
        .LifestylePerWebRequest());

暫無
暫無

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

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