您好我正在开发一个使用ef核心版本的aspnet核心应用程序:
“Microsoft.EntityFrameworkCore.Design”:“1.1.0”, “Microsoft.EntityFrameworkCore.SqlServer”:“1.1.0”
和dotnet标准1.6.1。
这是我的情景:
- 仅包含数据库的4 dbcontext
- DBSet或其他任何可能在两个或三个上下文中显示,例如AContext包含tableA, BContext还包含tableA。但是没有一个会包含所有表格,因为我希望特定的上下文关注其目的。
- 表之间的许多外围键
醇>
这会导致数据库中的dup表,但为了解决这个问题,我在下面做了
- 创建一个MigrationDBContext以包含所有DBSet
- 在此MigrationDBContext上添加迁移
醇>
这是我得到的
不幸的是,带-v的ef核心中的update-database命令不会显示sql脚本,Script-Migration只显示简单的create sql语句。
- 使用正确的架构和名称
成功创建数据库和表 调用时出现- 错误:serviceScope.ServiceProvider.GetService()。Database.Migrate(); 错误消息:数据库中已存在对象“A”。
醇>
我的问题是
- 如何调试这种情况?
- 检查了迁移文件,确实有一个down and up方法,但是这个错误似乎ef核心只在迁移中调用up方法 文件没有先调用down,并导致一些dup作为表 还在那里。那么,是否有任何开关来控制迁移行为?
醇>
答案 0 :(得分:0)
最简单的方法是创建一个DbContext,它将包含所有实体集和它们之间的关系。之后,您可以将存储逻辑与存储库分开。 困难的方法是为每个上下文创建特定于上下文的迁移。如果您需要添加一组实体,这些实体存在于另一个上下文中 - 您将需要为该上下文创建一个空迁移。这有点脏。