代码之家  ›  专栏  ›  技术社区  ›  David Létourneau

无法使用ASP添加迁移。净核心2

  •  3
  • David Létourneau  · 技术社区  · 6 年前

    我正在使用ASP构建一个新项目。net Core 2和EntityFrameWorkCore 2.1.0,我开始构建数据库结构。现在,我必须进行第一次迁移以准备好数据库,当我在Package Manager控制台中执行“Add Migration Init”时,我遇到了以下错误:

    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。身份EntityFrameworkCore 2.0.2和一个简单的2表结构,我能够让它工作。

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

    4 回复  |  直到 6 年前
        1
  •  15
  •   anothernode David Joel Lukombo    6 年前

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

    1. Microsoft.EntityFrameworkCore.SqlServer
    2. Microsoft.EntityFrameworkCore.Design
        2
  •  8
  •   Dan Beaulieu    6 年前

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

    首先,如果您只是从不是从ASP构建的旧项目迁移。net核心,您必须添加一个上下文工厂才能使迁移工作正常。这里是我自己的上下文工厂:

    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);
        }
    }
    

    如果出于架构目的将项目划分为多个层,请在存储库层内或DbContext所在的库中添加上下文工厂。

    其次,在尝试添加迁移之前,必须在存储库库上或DbContext所在的位置将set设置为启动项目。 然后,您需要使用以下软件包进行迁移:

    • 微软AspNetCore。身份EntityFrameworkCore
    • 微软EntityFrameworkCore。设计
    • 微软EntityFrameworkCore。SqlServer

    仅此而已!

    添加其他包时要小心,因为它们会破坏迁移系统。例如,如果您使用工作单元&URF和install等存储库框架 URF。果心EF。可跟踪-版本1.0.0-rc2 ,您将无法再添加迁移。而是使用 URF。果心EF。可跟踪-版本1.0.0-rc1 。我想其他许多软件包也可能出现这种情况。

    最后,阅读以下内容 article 会很有帮助的。这有点过时,但它可以帮助人们。

    干杯

        3
  •  0
  •   Matteo Tosato    6 年前

    您如何安排“Program.cs”中的main方法? 此错误可以由旧的初始化模式来处理。 根据Asp Net迁移指南:

    强烈建议采用这种新的2.0模式 实体框架(EF)核心等产品功能所需 迁移到工作状态。例如,从 Package Manager控制台窗口或dotnet ef数据库更新 命令行(在转换为ASP.NET Core 2.0的项目上)生成 以下错误:

    无法创建类型为“”的对象。将“IDesignTimeDbContextFactory”的实现添加到 项目,或参见 https://go.microsoft.com/fwlink/?linkid=851728 对于 设计时支持的其他模式。

    检查一下这个 link 正确实施

        4
  •  0
  •   Erdogan    4 年前

    在我的例子中,在ApplicationDbContext类中,dbcontext在启动时是不同的。

    services.AddDbContext<DbContext>
    

    services.AddDbContext<ApplicationDbContext>