ef核心:数据库中已经有一个对象

时间:2016-11-17 17:07:19

标签: database entity-framework asp.net-core entity-framework-core

您好我正在开发一个使用ef核心版本的aspnet核心应用程序:

  

“Microsoft.EntityFrameworkCore.Design”:“1.1.0”,       “Microsoft.EntityFrameworkCore.SqlServer”:“1.1.0”

和dotnet标准1.6.1。

这是我的情景:

  
      
  1. 仅包含数据库的4 dbcontext
  2.   
  3. DBSet或其他任何可能在两个或三个上下文中显示,例如AContext包含tableA,   BContext还包含tableA。但是没有一个会包含所有表格,因为我希望特定的上下文关注其目的。
  4.   
  5. 表之间的许多外围键
  6.   

这会导致数据库中的dup表,但为了解决这个问题,我在下面做了

  
      
  1. 创建一个MigrationDBContext以包含所有DBSet
  2.   
  3. 在此MigrationDBContext上添加迁移
  4.   

这是我得到的

  
      
  1. 使用正确的架构和名称
  2. 成功创建数据库和表   调用时出现
  3. 错误:serviceScope.ServiceProvider.GetService()。Database.Migrate();   错误消息:数据库中已存在对象“A”。
  4.   
不幸的是,带-v的ef核心中的update-database命令不会显示sql脚本,Script-Migration只显示简单的create sql语句。

我的问题是

  
      
  1. 如何调试这种情况?
  2.   
  3. 检查了迁移文件,确实有一个down and up方法,但是这个错误似乎ef核心只在迁移中调用up方法   文件没有先调用down,并导致一些dup作为表   还在那里。那么,是否有任何开关来控制迁移行为?
  4.   

1 个答案:

答案 0 :(得分:0)

最简单的方法是创建一个DbContext,它将包含所有实体集和它们之间的关系。之后,您可以将存储逻辑与存储库分开。 困难的方法是为每个上下文创建特定于上下文的迁移。如果您需要添加一组实体,这些实体存在于另一个上下文中 - 您将需要为该上下文创建一个空迁移。这有点脏。