为什么必须在子上下文中将 Database Initializer 设置为 null?
Why must the Database Initializer be set to null in a sub context?
我正在网上查看一些代码,其中同一个数据库有两个上下文(一个用于读取,一个用于写入):
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 对此 post 的回答解释了必须在子上下文中将初始化程序设置为 null:Entity Framework: One Database, Multiple DbContexts. Is this a bad idea?
为什么必须在子上下文中将数据库初始化程序设置为空?
我尝试将种子方法添加到我的一个子上下文中,但这会导致出现错误,指出存在未完成的迁移。这是不允许的吗?
实际上,您可以在同一数据库上拥有任意多的上下文(迁移历史记录 table 有对上下文的引用)。
如果上下文共享 table,则您必须对迁移进行一些修复(EF 尝试多次创建相同的 table)。这可能是你的情况,因为这就是你需要禁用初始化程序的原因。
如果这不是你的情况(tables 重叠),你可以在这里看到一个示例,但你不会看到任何有趣的东西,它只是有效。
在这种情况下,table 没有重叠,所以我只使用标准初始化程序创建 table。
这些是针对迁移历史运行的查询 table
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');
我正在网上查看一些代码,其中同一个数据库有两个上下文(一个用于读取,一个用于写入):
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 对此 post 的回答解释了必须在子上下文中将初始化程序设置为 null:Entity Framework: One Database, Multiple DbContexts. Is this a bad idea?
为什么必须在子上下文中将数据库初始化程序设置为空?
我尝试将种子方法添加到我的一个子上下文中,但这会导致出现错误,指出存在未完成的迁移。这是不允许的吗?
实际上,您可以在同一数据库上拥有任意多的上下文(迁移历史记录 table 有对上下文的引用)。
如果上下文共享 table,则您必须对迁移进行一些修复(EF 尝试多次创建相同的 table)。这可能是你的情况,因为这就是你需要禁用初始化程序的原因。
如果这不是你的情况(tables 重叠),你可以在这里看到一个示例,但你不会看到任何有趣的东西,它只是有效。
在这种情况下,table 没有重叠,所以我只使用标准初始化程序创建 table。
这些是针对迁移历史运行的查询 table
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');