我正在使用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表格结构,我能够使其工作。
所以现在我需要你的帮助......
答案 0 :(得分:11)
确保已安装必需的NuGet软件包:
Microsoft.EntityFrameworkCore.SqlServer
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所在的位置设置“设置为启动项目”的选择。 然后,这些是您需要用于迁移的包:
这就是全部!
添加其他包时要小心,因为它们可能会破坏迁移系统。例如,如果您使用工作单位&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)Core等产品功能所需 迁移工作。例如,从中运行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>