web-dev-qa-db-ja.com

移行エラー-DirectConstructorBindingタイプのリテラルをスキャフォールディングできません

JulieLermanによるPluralsightコースをフォローしています-EntityFramework Core 2: Getting Started。このコースでは、彼女には3つのプロジェクトがあります。最初の2つのDataDomainは、.NET標準ライブラリに基づいています。 3番目のプロジェクトWebは、.NET CoreWebアプリケーションです。

私はこの構造に従いました。 Dataに、Clientという1つのPOCOクラスを追加しました。

Domainに、次のようにTestDbContextというクラスを1つ追加しました。

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.

ジュリーのビデオでは、これはすべて彼女のために機能し、移行パッケージが作成されました。しかし、私にとっては、エラーだけです。何が起こっているのかについての手がかりはありますか?

5
RHarris

'.csproj'ファイルでプロジェクトのパッケージバージョンを確認してください。以前は、AspNet CoreEntityFramework 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" /> 
10

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" />
5
Alamgir

これは私にとってトリックでした!

<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>
2
user2659261

これは私にとってトリックでした:

-> 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ファイルを編集します->ソリューションを再コンパイルします

->移行の追加:add-migration initial

ハッピーコーディング...

0
TrailBlazer

プラグインをインストールしますMicrosoft.EntityFrameworkCore.Designデータベースプロジェクトに(ここでdbcontextクラスが作成したプロジェクト)

0
Yaseer