Ошибка миграции — не удается сформировать литералы типа DirectConstructorBinding

Я прохожу курс Pluralsight от Джули Лерман -- EntityFramework Core 2: Getting Started. В этом курсе у нее 3 проекта. Первые два Data и Domain основаны на библиотеке .NET Standard. Третий проект Web — это веб-приложение .NET Core.

Я следовал этой структуре. В Data я добавил один класс POCO под названием Client.

В Domain я добавил один класс TestDbContext вот так:

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

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

    }
}

Следуя ее примеру, я сделал следующее в Startup.cs моего проекта Web, чтобы внедрить поставщика и строку подключения в 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.

В видео Джули все это сработало, и пакет миграции был создан. Однако для меня -- просто ошибка. Любые подсказки относительно того, что может происходить?


person RHarris    schedule 08.06.2018    source источник


Ответы (5)


Проверьте версию пакета вашего проекта в файле «.csproj». Раньше у меня была такая же проблема с совпадением версий AspNet Core и EntityFramework Core (наверное). Делать те же самые работы для меня прекрасно. Решение найдено здесь

Для меня Сейчас.

<PackageReference Include="Microsoft.AspNetCore.App" Version="2.1.0-rc1-final" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.0-rc1-final" PrivateAssets="All" /> 
person Jaggesher Mondal    schedule 09.06.2018
comment
Вот оно. Я ориентировался на .netcoreapp2.0, но EntityFrameworkCore.SqlServer был версии 2.1.0. Спасибо! - person RHarris; 11.06.2018

Добавьте 3 пакета с одинаковой версией из диспетчера пакетов nuget

<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" />
person Alamgir    schedule 23.09.2018

Это помогло мне!

<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>
person user2659261    schedule 12.07.2018
comment
Трюк сработал и у меня. это сэкономило много времени. Спасибо - person Dnyneshwar; 12.08.2018

Установите подключаемый модуль Microsoft.EntityFrameworkCore.Design в проект базы данных (где класс dbcontext создал проект)

person Yaseer    schedule 04.06.2019
comment
Моя проблема решена, огромное спасибо :) - person Masoud Darvishian; 17.06.2021

Это помогло мне:

-> Откройте файл WebApp .csproj и внесите следующие изменения:

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

Теперь становится:

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

-> Установите последнюю версию Microsoft.AspNetCore.App из пакета nugget в веб-приложение.

-> Закомментируйте эту строку:

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

-> Отредактируйте файл StartUp.cs, закомментировав «app.UseBrowserLink()» -> Перекомпилируйте решение

->Добавить миграцию: добавить начальную миграцию

Удачного кодирования...

person TrailBlazer    schedule 18.07.2019