我正在查看一些在线代码,其中有两个相同数据库的上下文(一个用于读取,一个用于写入):
public class OrderReadContext: DbContext
{
public OrderReadContext() : base("name=GeekStuffSales") {
}
public DbSet<SalesOrder> Orders { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.HasDefaultSchema("Order");
}
}
public class OrderSystemContextConfig : DbConfiguration
{
public OrderSystemContextConfig() {
SetDatabaseInitializer(new NullDatabaseInitializer<OrderReadContext>());
}
}
Ladislav Mrnkas&#39;回答这篇文章解释了初始化程序必须在子上下文中设置为null:Entity Framework: One Database, Multiple DbContexts. Is this a bad idea?
为什么必须在子上下文中将Database Initializer设置为null?
我尝试将种子方法添加到我的一个子上下文中,但是这会导致错误,说明存在未完成的迁移。这是不允许的吗?
答案 0 :(得分:1)
实际上,您可以在同一个数据库中拥有所需的上下文(迁移历史记录表具有对上下文的引用)。
如果上下文共享表,则必须对迁移进行一些修复(EF尝试更多次创建同一个表)。这可能就是你需要禁用初始化程序的原因。
如果不是这种情况(表格重叠),你可以在这里看到一个样本,但你看不到任何有趣的东西,它只是有效。
在这种情况下,表格不重叠,因此我只使用标准初始化程序创建表格 这些是通过迁移历史记录表
运行的查询insert into [__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
values ('201709210714271_InitialCreate', 'JetEntityFrameworkProvider.Test.Model37_2Contexts_1.Context1', 0x1F8B08000...and so on... , '6.1.3-40302');
insert into [__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
values ('201709210714279_InitialCreate', 'JetEntityFrameworkProvider.Test.Model37_2Contexts_2.Context2', 0x1F8B0...and so on... , '6.1.3-40302');