【问题标题】:Multiple DbContext classes use the same connection string?多个 DbContext 类使用相同的连接字符串?
【发布时间】:2012-12-22 01:20:12
【问题描述】:

例如,我有以下 DbContext 类。

public class AppDbContext : DbContext {
    ...
}
public class LogDbContext : DbContext {
    ...
}
public class FooDbContext : DbContext {
    ...
}

如果名为AppDbContext 的连接字符串在App.Config 上,并且我希望其他DbContext 类与AppDbContext 共享相同的连接字符串,我可以将字符串“AppDbContext”作为@987654327 的参数传递吗@ 的 LogDbContextFooDbContext。例如,

public class FooDbContext : DbContext {
    public FooDbContext : base("AppDbContext") { }
}

有副作用吗?

2013 年 1 月 9 日更新

在尝试了@ShinH2S 的建议和一些东西之后,我放弃了这种方式,并决定给不同的 Dbcontext 派生类提供不同的连接字符串和数据库。我试过a test project and put it on GitHub。当实体框架检测到数据库方案发生更改时,它将抛出运行时异常,因为AppDbContextFooDbContext 具有不同的模式。如果我将DropCreateDatabaseIfModelChanges 策略分配给两个 DbContext 派生类,则其中一个将被删除,因为模型与另一个不同。

2017/10 更新

这是一个老问题。在我的记忆中,EF6 and above versions 对于同一个迁移表中的多个上下文可以有不同的迁移历史。 我更喜欢this answer at SO。我已经有 2 年没有使用 C# 编码了。

【问题讨论】:

    标签: entity-framework entity-framework-5


    【解决方案1】:

    恕我直言,没有副作用。但如果是我,我将只创建一个继承自 DbContext 类 BaseDbContext 的基类,那么所有上下文(AppDbContextLogDbContextFooDbContext)都将派生自 BaseDbContext

    【讨论】:

    • 如果那些 XXXDbContext 派生自BaseDbContext,我如何使它们具有相同的连接字符串以便它们使用相同的数据库?我是否配置了一个名为BaseDbContext 的连接字符串,并且所有派生类都使用BaseDbContext 进行连接?
    • 首先在配置文件中创建一个名为BaseDbContext 的连接字符串。在您的BaseDbContext 类中,您创建一个像这样的默认构造函数:public BaseDbContext() : base("BaseDbcontext") { }。这就是你所要做的。
    • 我要试试。那些XXXDbContext不在同一个类库中,我这样创建表失败public FooDbContext() : base("AppDbContext")
    • 错误是什么?我不明白你为什么需要做public FooDbContext() : base("AppDbContext")。派生类的构造函数必须是这样的:public FooDbContext() : base() {}。不需要传递连接字符串的名称,因为它已经在基类中。
    • FooDbContext 的表不是在同一个数据库中创建的。现在我需要弄清楚会发生什么。今天我的工作将集中在这个问题上。
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多