当我使用带有.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时,我只需要实例化一个数据库对象。
有没有办法只使用一个上下文?这是推荐的吗?
答案 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;数据库
您的数据上下文会进入您的数据层。您的逻辑将进入您的业务逻辑层。