我正在使用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软件包:
-
Microsoft.EntityFrameworkCore.SqlServer
-
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>