[英]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.