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

戴维·勒图诺

我正在使用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所在的位置设置“设置为启动项目”选项。然后,这些是您需要用于迁移的软件包:

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.Design
  • Microsoft.EntityFrameworkCore.SqlServer

就这样!

添加其他程序包时请小心,因为它们可能会破坏迁移系统。例如,如果您使用工作单元和存储库框架(如URF)并安装URF.Core.EF.Trackable -Version 1.0.0-rc2,则将不再能够添加迁移。而是使用URF.Core.EF.Trackable -Version 1.0.0-rc1我猜这也可能发生在许多其他软件包中。

最后,阅读本文会有所帮助。这有点过时了,但是可以帮助那里的人们。

干杯

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章