1

嗨,我上的ASPNET核心应用程序,它使用EF核心版本命名为工作对象:EF核心:目前已经在数据库

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

和dotnet标准1.6.1。

这里是我的scenaro:

  1. 4的DbContext只有一个数据库
  2. DBSet或任何其它可以在两个或三个上下文,例如AContext包含表A显示, BContext还含有TABLEA。但他们都不会包括所有的表格,因为我希望特定的上下文关注它的目的。表之间
  3. 许多foreigne键

这将导致数据库中的DUP表,但要解决这个问题,我在下面

  1. 完成创建MigrationDBContext包括所有DBSet
  2. 在这个MigrationDBContext添加迁移

这里是我所得到的

  1. 成功创建数据库,并与合适的模式和名称
  2. 错误表时,电话:serviceScope.ServiceProvider.GetService()Database.Migrate()。 错误消息:数据库中已存在一个名为“A”的对象。

unfortunitly,与-v EF核心将不会显示SQL脚本更新数据库命令,脚本迁移只显示简单的创建SQL语句。

我的问题是

  1. 如何将这种这种情况调试?
  2. 检查了迁移文件,确实有一种向下和向上的方法,但是这个错误看起来像ef核心只调用迁移 文件中的up方法而没有首先调用down,并且导致一些dup,因为表 仍然是那里。那么,是否有任何切换来控​​制迁移行为?

回答

0

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