9

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

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

4

1 回答 1

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; }
}

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

UI -> 控制器 -> 业务逻辑 -> 数据访问 -> 数据库

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

于 2013-04-25T23:38:25.820 回答