为什么有多个DbContext类?

时间:2013-04-25 23:26:58

标签: c# asp.net-mvc entity-framework

当我使用带有.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时,我只需要实例化一个数据库对象。

有没有办法只使用一个上下文?这是推荐的吗?

1 个答案:

答案 0 :(得分:13)

不应该阻止您使用一个上下文。数据库和用于访问它的工具应该完全独立于它之外的任何东西(业务逻辑,服务层,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; }
}

如果有帮助,典型的业务流程如下:

  

用户界面 - &gt;控制器 - &gt;业务逻辑 - &gt;数据访问 - &gt;数据库

您的数据上下文会进入您的数据层。您的逻辑将进入您的业务逻辑层。