EF7迁移生成器忽略上下文参数

时间:2017-02-12 12:33:51

标签: c# .net entity-framework ef-migrations

我最近将我的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

以前有人解决了这个问题吗?

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的原因。

我的项目中有多个上下文,每个上下文都需要参数。因此,迁移构建器期望每个上下文都有一个工厂。

在我的情况下,一个类实现所有工厂,现在有一个错误,使用接口的具体顺序来确定创建了哪些迁移。

public class Program : IDbContextFactory<CoreContext>, IDbContextFactory<AuditLogContext>, IDbContextFactory<LockContext>

此代码段将为CoreContext

创建迁移
public class Program :  IDbContextFactory<AuditLogContext>, IDbContextFactory<CoreContext>,IDbContextFactory<LockContext>

,该代码段将为AuditLogContext创建迁移。

这有点烦人,但如果你知道如何创建迁移,那就没关系。