我正在使用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/zh-cn/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.
我也关注了这篇文章,但没有成功。
如果我尝试不使用Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0.2,并使用简单的2表结构,则可以使其工作。
所以现在我需要你的帮助...
我发现了一些原因,使得我们现在很难在最新版本的ASP.net Core 2中使用迁移。
首先,如果您只是从根本不是从ASP.net Core构建的旧项目中进行迁移,则必须添加一个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);
}
}
如果将项目划分为用于体系结构目的的层,请在存储库层内部或DbContext所在的同一库中添加上下文工厂。
其次,在尝试添加任何迁移之前,必须在存储库库或DbContext所在的位置设置“设置为启动项目”选项。然后,这些是您需要用于迁移的软件包:
就这样!
添加其他程序包时请小心,因为它们可能会破坏迁移系统。例如,如果您使用工作单元和存储库框架(如URF)并安装URF.Core.EF.Trackable -Version 1.0.0-rc2,则将不再能够添加迁移。而是使用URF.Core.EF.Trackable -Version 1.0.0-rc1。我猜这也可能发生在许多其他软件包中。
最后,阅读本文会有所帮助。这有点过时了,但是可以帮助那里的人们。
干杯
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句