为什么有多个DbContext类?

当我使用带有.dbml文件的LINQ进行编程时,只有一个上下文。 但是,当我做一个MVC网站时,似乎我为每个实体都有单独的上下文(这是MVC教程向我展示如何做到的方式;有“电影”上下文)。

我有:

public class AccountsContext : DbContext { public AccountsContext() : base("DefaultConnection") { } public DbSet Accounts { get; set; } } 

我有:

 public class ClientsContext : DbContext { public ClientsContext() : base("DefaultConnection") { } public DbSet 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 Entities { get; set; } public DbSet Contacts { get; set; } } 

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

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

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