多个DbContext类使用相同的连接字符串?

时间:2013-01-08 08:11:41

标签: entity-framework entity-framework-5

例如,我有以下DbContext类。

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

如果名为AppDbContext的连接字符串在App.Config上,并且我希望其他DbContext类与AppDbContext共享相同的连接字符串,我是否可以将字符串“AppDbContext”作为ctor LogDbContextFooDbContext的{​​{1}}参数。例如,

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

它有副作用吗?

更新2013/1/9

在尝试了@ ShinH2S的建议和事情之后,我放弃了这种方式,并决定使用不同的connectionStrings和数据库给出不同的Dbcontext派生类。我试过a test project and put it on GitHub。当entityframework检测到数据库方案发生更改时,它将抛出运行时异常,因为AppDbContextFooDbContext具有不同的模式。如果我为两个DbContext派生类分配DropCreateDatabaseIfModelChanges策略,则会删除其中一个,因为模型与另一个不同。

更新2017/10

这是一个老问题。在我的记忆中,EF6 and above versions可以在同一个迁移表中为多个上下文提供不同的迁移历史记录。 我更喜欢this answer at SO。我用C#编写了大约2年的编码。

1 个答案:

答案 0 :(得分:5)

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