[英]Why multiple DbContext classes?
當我使用帶有.dbml文件的LINQ進行編程時,只有一個上下文。 但是,當我做一個MVC網站時,似乎我為每個實體都有單獨的上下文(這就是MVC教程向我展示如何做到的方式;以及“電影”上下文)。
我有:
public class AccountsContext : DbContext
{
public AccountsContext()
: base("DefaultConnection")
{
}
public DbSet<Account> Accounts { get; set; }
}
我有:
public class ClientsContext : DbContext
{
public ClientsContext()
: base("DefaultConnection")
{
}
public DbSet<Client> Clients { get; set; }
}
當我調用它們時,我必須創建單獨的上下文,例如:
private AccountsContext db = new AccountsContext();
private ClientsContext clientsContext = new ClientsContext();
...這兩者都很煩人,而且它似乎是多余的,因為我知道當我使用LINQ時,我只需要實例化一個數據庫對象。
有沒有辦法只使用一個上下文?這是推薦的嗎?
不應該阻止您使用一個上下文。 數據庫和用於訪問它的工具應該完全獨立於它之外的任何東西(業務邏輯,服務層,UI等......)。
上下文的數量或您如何使用它們不應該根據您的客戶端技術進行更改。
那么MVC會讓你相信你需要不止一個上下文? 是什么阻止你這樣做?
如果您認為需要為每個實體使用上下文,因為樣本是這樣的,您不需要。 只需使用一個上下文。
如果它有幫助,這就是多個實體的簡單上下文:
public partial class abook_dbEntities : DbContext
{
public abook_dbEntities()
: base("name=abook_dbEntities")
{
}
public DbSet<Entity> Entities { get; set; }
public DbSet<Contact> Contacts { get; set; }
}
如果有幫助,典型的業務流程如下所示:
UI - >控制器 - >業務邏輯 - >數據訪問 - >數據庫
您的數據上下文將包含在您的數據層中。 您的邏輯將進入您的業務邏輯層。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.