2013-04-25 24 views
8

當我使用LINQ與.dbml文件編程時,只有一個上下文。但是,當我做一個MVC網站時,似乎我爲每個實體都有單獨的上下文(這是MVC教程向我展示瞭如何實現的方式;以及「電影」上下文)。爲什麼使用多個DbContext類?

我:

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時,我只需要實例化一個數據庫對象。

有沒有辦法只使用一個語境,這是推薦?

回答

12

不應該有任何東西阻止你使用一個上下文。數據庫以及用於訪問它的工具應該完全獨立於它之外的任何東西(業務邏輯,服務層,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 - >控制器 - >業務邏輯 - >數據訪問 - >數據庫

您的數據上下文將進入您的數據層。你的邏輯會進入你的業務邏輯層。

+5

電影MVC示例特意故意使用多個上下文。 http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-model。爲什麼,我不知道。也許只是爲了說明可以這樣做。對於非常大的應用程序來說這可能是一個理想的事情;您可以爲公司的每個部門或每個物理數據庫創建一個上下文。 – 2013-04-25 23:42:35

+0

你知道這是否有很好的理由嗎?因此,OP可能認爲必須這樣做,因爲這個例子? – 2013-04-25 23:44:18

+0

這將是我的猜測。 – 2013-04-25 23:44:36

相關問題