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



我正在使用ASP.NET Core 2和EntityFrameWorkCore 2.1.0构建一个新项目,然后我开始构建数据库结构。现在,我必须进行第一次迁移才能准备好数据库,当我执行"添加迁移init"到软件包管理器控制台时,我收到了此错误:

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

我也尝试了此文档https://learn.microsoft.com/en-us/aspnet/core/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.

我也遵循了本文,没有任何成功。

如果我不尝试Microsoft.aspnetcore.indistity.entityframeworkcore 2.0.2,并且使用简单的2个表结构,我可以使它起作用。

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

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

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

我找到了一些原因,我们可以很难使用最新版本的asp.net core 2使用迁移。

首先,如果您只是从一个根本不是从ASP.NET Core构建的旧项目中迁移,则必须添加上下文工厂以使迁移工作。这里我自己的上下文工厂:

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所在的位置设置"设置为启动项目"的选择。然后,这些是您需要使用的包装:

  • Microsoft.aspnetcore.Identity.EntityFrameWorkcore
  • microsoft.entityframeworkcore.design
  • microsoft.entityframeworkcore.sqlserver

仅此而已!

添加其他软件包时要小心,因为它们可以打破迁移系统。例如,如果您使用一个工作单位&amp;存储库框架等URF和install URF.CORE.CORE.EF.TRACKABLE -VERSION 1.0.0.0 -RC2 ,您将不再能够添加迁移。而是使用 urf.core.ef.ef.trackable -version 1.0.0.0 -rc1 。我想这也可能与许多其他软件包发生。

最后,阅读本文将有所帮助。它有点过时,但可以帮助人们。

欢呼

如何在" program.cs"中安排主方法?此错误可以适合旧的初始化模式。根据ASP Net迁移指南:

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

无法创建类型的对象'。将" IDesigntimedBcontextFactory"的实现 项目,或查看https://go.microsoft.com/fwlink/?linkid=851728 设计时支持的其他模式。

检查正确实现的链接

在我的情况下,dbContext在applicationdbcontext类中的启动中有所不同。

services.AddDbContext<DbContext>

to

services.AddDbContext<ApplicationDbContext>

相关内容

  • 没有找到相关文章