JulieLermanによるPluralsightコースをフォローしています-EntityFramework Core 2: Getting Started
。このコースでは、彼女には3つのプロジェクトがあります。最初の2つのData
とDomain
は、.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.
ジュリーのビデオでは、これはすべて彼女のために機能し、移行パッケージが作成されました。しかし、私にとっては、エラーだけです。何が起こっているのかについての手がかりはありますか?
'.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" />
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" />
これは私にとってトリックでした!
<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>
これは私にとってトリックでした:
-> 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
ハッピーコーディング...
プラグインをインストールしますMicrosoft.EntityFrameworkCore.Designデータベースプロジェクトに(ここでdbcontextクラスが作成したプロジェクト)