【问题标题】:Why multiple DbContext classes?为什么有多个 DbContext 类?
【发布时间】:2013-04-20 00:47:24
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    不应该有任何东西阻止您使用一种上下文。数据库以及用于访问它的工具应该完全独立于它之外的任何东西(业务逻辑、服务层、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 -> 控制器 -> 业务逻辑 -> 数据访问 -> 数据库

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

    【讨论】:

    • Movies MVC 示例专门且有意地使用了多个上下文。 asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/…。为什么,我不知道。也许只是为了说明这样做是可能的。对于非常大的应用程序来说,这可能是一件可取的事情;您可以为公司的每个部门或每个物理数据库创建一个上下文。
    • 您知道这样做是否有充分的理由吗?所以也许 OP 认为它必须这样做,因为那个例子?
    • @BobHorn 有没有办法在单独的文件中执行您所做的操作?例如,我希望在 accounts.cs 文件中与“帐户”相关的所有逻辑以及在 clients.cs 文件中与“客户”相关的所有逻辑 - 而不是在同一个文件中声明帐户和客户(这可能会造成混淆在路上)。
    • @user1477388 上下文类是一个分部类,因此您可以创建多个分部类。但是,逻辑不应该放在这些文件中,它们应该放在您的业务逻辑类中。
    • @user1477388 通常,BLL 是存储业务逻辑的一个地方。这样它就不会散布在您的整个系统中,因此可以围绕它画一条信任线(围绕它的安全性)。如果您有一个简单的应用程序,并且只有模型、视图和控制器,那么将您的逻辑放入模型中。它绝对不属于您的数据类。
    猜你喜欢
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2011-05-15
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多