我最近将我的EF7项目从DotNet Core 1.0.0迁移到1.1.0版,现在我在创建数据库迁移方面遇到了麻烦。
在我的项目中,我有多个上下文,工具dotnet-ef提供了一个命令行参数来区分这些上下文,以便为每个上下文创建单独的迁移。
当我尝试为上下文" AuditLogContext"创建迁移时使用命令
dotnet ef migrations add Initial --context 'Some.Namespace.AuditLogContext' --output-dir './Migrations/AuditLogMigrations'
然后它失败了,告诉我
名称' Initial'由现有迁移使用。
当我尝试使用其他名称创建迁移时,例如 Initial2 ,将创建迁移,但是对于错误的上下文。
在文件夹
中./迁移/ AuditLogMigrations
是名为
的新文件20170212122451_Initial2.cs
20170212122451_Initial2.Designer.cs
CoreContextModelSnapshot.cs
我希望文件 AuditLogContextModelSnapshot.cs 。
以前有人解决了这个问题吗?
答案 0 :(得分:0)
我找到了这个问题的原因。
我的项目中有多个上下文,每个上下文都需要参数。因此,迁移构建器期望每个上下文都有一个工厂。
在我的情况下,一个类实现所有工厂,现在有一个错误,使用接口的具体顺序来确定创建了哪些迁移。
public class Program : IDbContextFactory<CoreContext>, IDbContextFactory<AuditLogContext>, IDbContextFactory<LockContext>
此代码段将为CoreContext
创建迁移public class Program : IDbContextFactory<AuditLogContext>, IDbContextFactory<CoreContext>,IDbContextFactory<LockContext>
,该代码段将为AuditLogContext创建迁移。
这有点烦人,但如果你知道如何创建迁移,那就没关系。