Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么必须在子上下文中将数据库初始值设定项设置为null?_C#_Entity Framework_Cqrs - Fatal编程技术网

C# 为什么必须在子上下文中将数据库初始值设定项设置为null?

C# 为什么必须在子上下文中将数据库初始值设定项设置为null?,c#,entity-framework,cqrs,C#,Entity Framework,Cqrs,我正在在线查看一些代码,其中同一数据库有两个上下文(一个用于读取,一个用于写入): 公共类OrderReadContext:DbContext { public OrderReadContext():base(“name=GeekStuffSales”){ } 公共数据库集命令{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder){ modelBuilder.hasdaultschema(“订单”); } } 公共类OrderSystemCon

我正在在线查看一些代码,其中同一数据库有两个上下文(一个用于读取,一个用于写入):

公共类OrderReadContext:DbContext { public OrderReadContext():base(“name=GeekStuffSales”){ } 公共数据库集命令{get;set;} 模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder){ modelBuilder.hasdaultschema(“订单”); } } 公共类OrderSystemContextConfig:DbConfiguration { public OrderSystemContextConfig(){ SetDatabaseInitializer(新的NullDatabaseInitializer()); } } Ladislav Mrnkas对此帖子的回答解释了在子上下文中必须将初始值设定项设置为null:

为什么必须在子上下文中将数据库初始值设定项设置为null


我尝试将种子方法添加到我的一个子上下文中,但是这会导致一个错误,即存在未完成的迁移。这是不允许的吗?

实际上,您可以在同一数据库上拥有所需的任意多个上下文(迁移历史记录表中有对上下文的引用)。
如果上下文共享表,则必须对迁移进行一些修复(EF tryes可多次创建相同的表)。这可能是您的情况,这就是为什么您需要禁用初始值设定项

如果这不是您的情况(表重叠),您可以在这里看到一个示例,但您不会看到任何有趣的内容,它只是起作用

在这种情况下,表没有重叠,因此我只使用标准初始值设定项创建表。
这些是在迁移历史记录表上运行的查询

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');

你是说如果一个表存在于多个上下文中,就不能使用Seed方法吗+1作为迁移表的参考。谢谢。我不确定我是否理解了。这个问题只涉及表的创建和表的迁移。如果您有两个具有相同实体(相同poco类)和相同表(相同数据库、相同架构和相同表)的上下文,那么当您为这两个上下文创建数据库或更改实体时,具有标准迁移配置的表将运行2次,每个上下文一次(因此,在第二个创建表时,您将收到一个错误)。因此,在您的情况下,您只能启用一个默认迁移。在该迁移中,您还可以为表设置种子。
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');