迁移错误 - 无法构建DirectConstructorBinding类型的文字

时间:2018-06-08 14:49:07

标签: ef-core-2.0

我正在跟随Julie Lerman的多元文学课程 - EntityFramework Core 2: Getting Started。在这门课程中,她有3个项目。前两个DataDomain基于.NET标准库。第三个项目Web是.NET核心Web应用程序。

我遵循了这个结构。在Data中,我添加了一个名为Client的POCO类。

Domain中,我添加了一个名为TestDbContext的类,如下所示:

public class TestDbContext : DbContext
{
    public DbSet<Client> Clients { get; set; }

    public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
    {

    }
}

在她的示例之后,我在我的Web项目的Startup.cs中执行了以下操作,将提供程序和连接字符串注入DbContext。

public void ConfigureServices(IServiceCollection services)
{
   services.AddMvc();
   services.AddDbContext<TestDbContext>(options =>
   {
       options.UseSqlServer(Configuration.GetConnectionString("TestConnection"));
   });
}

最后,我尝试向此上下文添加迁移。我将Web项目设置为启动项目。在软件包管理器控制台中,我输入add-migration initial

然后我收到以下错误:The current CSharpHelper cannot scaffold literals of type 'Microsoft.EntityFrameworkCore.Metadata.Internal.DirectConstructorBinding'. Configure your services to use one that can.

在Julie的视频中,这一切都适合她并且创建了迁移包。但是,对我来说 - 只是错误。关于可能发生的事情的任何线索?

5 个答案:

答案 0 :(得分:10)

在“.csproj”文件中检查项目的包版本。以前我对 AspNet Core EntityFramework Core (我猜)的版本mitch匹配有同样的问题。为我做同样的工作很好。找到解决方案Here

对我而言。

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0-rc1-final" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0-rc1-final" PrivateAssets="All" /> 

答案 1 :(得分:5)

从nuget软件包管理器中添加3个具有相同版本的软件包

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.1.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.2" />

答案 2 :(得分:2)

这帮了我大忙!

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.1" />
</ItemGroup>

<ItemGroup>
<DotNetCliToolReference  Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.1.0- preview1-final" />
</ItemGroup>
</Project>

答案 3 :(得分:0)

在数据库项目中安装插件 Microsoft.EntityFrameworkCore.Design (其中 dbcontext 类创建了项目)

答案 4 :(得分:0)

这对我有用:

->打开WebApp .csproj文件并进行以下更改:

<PropertyGroup>
  <TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

现在变成:

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>

->从掘金包中将最新的Microsoft.AspNetCore.App安装到Web应用中

->注释此行:

<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />

->通过注释掉“ app.UseBrowserLink()”来编辑StartUp.cs文件 ->重新编译解决方案

->添加迁移:初始添加迁移

快乐的编码...