gpt4 book ai didi

c# - 为什么有多个 DbContext 类?

转载 作者:太空狗 更新时间:2023-10-29 17:43:28 25 4
gpt4 key购买 nike

当我使用 LINQ 和 .dbml 文件进行编程时,只有一个上下文。但是,当我创建一个 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 时,我只需要实例化一个数据库对象。

有没有办法只使用一个上下文?是否推荐这种方法?

最佳答案

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

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

关于c# - 为什么有多个 DbContext 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com