无法使用ASP.net Core 2添加迁移

时间:2018-03-27 19:50:38

标签: c# asp.net-core ef-code-first asp.net-identity

我正在使用ASP.net Core 2和EntityFrameWorkCore 2.1.0构建一个新项目,我开始构建数据库结构。现在,我必须进行第一次迁移以准备好数据库,并在执行“添加迁移初始化”时进行。进入软件包管理器控制台我收到了这个错误:

The current CSharpHelper cannot scaffold literals of type 'Microsoft.EntityFrameworkCore.Metadata.Internal.DirectConstructorBinding'. Configure your services to use one that can.

我也试过这个文档https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/migrations,我得到的信息是:

Unable to create an object of type 'ApplicationDbContext'. Add an implementation of 'IDesignTimeDbContextFactory<ApplicationDbContext>' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time.

我也跟着这个article没有成功。

如果我在没有Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0.2的情况下尝试并且使用简单的2表格结构,我能够使其工作。

所以现在我需要你的帮助......

4 个答案:

答案 0 :(得分:11)

确保已安装必需的NuGet软件包:

  1. Microsoft.EntityFrameworkCore.SqlServer
  2. Microsoft.EntityFrameworkCore.Design

答案 1 :(得分:6)

我找到了一些原因,为什么我们现在很难在最新版本的ASP.net Core 2上使用迁移。

首先,如果您只是从一个非ASP.net Core构建的旧项目迁移,您将不得不添加一个Context Factory来使迁移工作。这是我自己的Context Factory:

public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
        builder.UseSqlServer("Server=(local)\\SQLEXPRESS;Database=yourdatabase;User ID=user;Password=password;TrustServerCertificate=True;Trusted_Connection=False;Connection Timeout=30;Integrated Security=False;Persist Security Info=False;Encrypt=True;MultipleActiveResultSets=True;",
            optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(ApplicationDbContext).GetTypeInfo().Assembly.GetName().Name));

        return new ApplicationDbContext(builder.Options);
    }
}

如果为了架构目的将项目划分为多个层,请在Repository Layer中或在DbContext所在的同一个库中添加Context Factory。

其次,在尝试添加迁移之前,必须在存储库库或DbContext所在的位置设置“设置为启动项目”的选择。 然后,这些是您需要用于迁移的包:

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.SqlServer

这就是全部!

添加其他包时要小心,因为它们可能会破坏迁移系统。例如,如果您使用工作单位&amp;像URF这样的存储库框架并安装 URF.Core.EF.Trackable -Version 1.0.0-rc2 ,您将无法再添加迁移。而是使用 URF.Core.EF.Trackable -Version 1.0.0-rc1 。我想这可能会发生在许多其他软件包中。

最后,阅读此article会很有帮助。这有点过时,但它可以帮助那里的人。

干杯

答案 2 :(得分:0)

如何在&#34; Program.cs&#34;中安排主要方法? 此错误可以适用于旧的初始化模式。 从Asp Net迁移指南:

  

强烈建议采用这种新的2.0模式   实体框架(EF)Cor​​e等产品功能所需   迁移工作。例如,从中运行Update-Database   来自的软件包管理器控制台窗口或dotnet ef数据库更新   命令行(在转换为ASP.NET Core 2.0的项目上)生成   以下错误:

     
    

无法创建&#39;&#39;类型的对象。添加&#39; IDesignTimeDbContextFactory&#39;的实现到了     项目,或参见https://go.microsoft.com/fwlink/?linkid=851728     在设计时支持其他模式。

  

检查此link正确的实施

答案 3 :(得分:0)

在我的情况下,dbcontext在ApplicationDbContext类中的Startup中有所不同。

services.AddDbContext<DbContext>

services.AddDbContext<ApplicationDbContext>