私のソリューションには2つのプロジェクトがあり、Entity Framework Coreがインストールされたプロジェクトがあります。
そして、他のASP.NET Web APIプロジェクトには、次のパッケージがあります。
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights" version="2.5.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.Agent.Intercept" version="2.4.0" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.DependencyCollector" version="2.5.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.PerfCounterCollector" version="2.5.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.Web" version="2.5.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.WindowsServer" version="2.5.1" targetFramework="net461" />
<package id="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" version="2.5.1" targetFramework="net461" />
<package id="Microsoft.AspNet.Mvc" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.Razor" version="3.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.TelemetryCorrelation" version="1.0.0" targetFramework="net461" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.4" targetFramework="net461" />
<package id="Microsoft.AspNet.WebPages" version="3.2.4" targetFramework="net461" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.0" targetFramework="net461" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net461" />
<package id="Newtonsoft.Json" version="11.0.1" targetFramework="net461" />
<package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net461" />
<package id="WebGrease" version="1.6.0" targetFramework="net461" />
</packages>
PMCでAdd-Migration
を実行すると:
スタートアッププロジェクト 'API'はMicrosoft.EntityFrameworkCore.Designを参照していません。このパッケージは、Entity Framework Core Toolsが機能するために必要です。スタートアッププロジェクトが正しいことを確認し、パッケージをインストールして、再試行してください。
Microsoft.EntityFrameworkCore.Designを、すべてのエンティティを含むデータプロジェクトではなく、スタートアッププロジェクトにインストールしましたが、機能します。これは、プロジェクトのセットアップ方法ですか。
私はここで解決策を見つけました: http://obscureproblemsandgotchas.com/development/c/dotnet-core-ef-migration-not-working/
簡単に言うと、csprojファイルを編集し、次のエントリにPropertyGroup
セクションを追加します。
<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
複数のプロジェクトがありますか?はいの場合は、ソリューションエクスプローラーからホストプロジェクトをスタートアッププロジェクトとして作成し、PMCでプロジェクトをデフォルト(DBContextを持つプロジェクト)に設定する必要があります。次に、Add-Migration
コマンドを実行します。
Visual Studioが.NET Frameworkの旧式のエンティティフレームワークではなくエンティティフレームワークコアを使用するようにデフォルト設定したため、このエラーが発生しました:エンティティフレームワーク6。これが私の解決策でした。
EntityFramework\Update-Database
または、バージョンを明示的に参照します。
EntityFramework6\Update-Database
また、パッケージマネージャーコンソールで適切なプロジェクトが選択されていることも確認する価値があります。それは半分の時間で他のプロジェクトに忍び込むのが好きです!
「 'プロジェクト名'は、スタートアッププロジェクトMicrosoft.EntityFrameworkCore.Designを参照していません。このパッケージは、Entity Framework Core Toolsが機能するために必要です。スタートアッププロジェクトが正しいことを確認し、パッケージをインストールして、再試行してください。」
このエラーが発生した場合は、プロジェクトで 'Build> Clean Solution'を試してから、コマンドを再実行してください。
これは私のプロジェクトで機能しました。または、 ドキュメント を確認することもできます。
プロジェクトで.Net Core 3.1バージョンを使用しています。
エンティティを含むプロジェクトをスタートアッププロジェクトとして設定し、scaffoldingコマンドを実行します。それは私のために働いた。後でスタートアッププロジェクトを元に戻すように設定することを忘れないでください。
スタートアッププロジェクトとしてWebプロジェクトを再度設定しようとすると、この警告が表示されます。 (Webプロジェクトを右クリック> [スタートアッププロジェクトに設定])
サービスにEF参照を追加せずに移行を行う場合は、データアクセスを持つライブラリにDbContextのインスタンスを構築する方法が必要です。これを行うには、IDesignTimeDbContextFactoryを実装します。次に例を示します。
public class MyContextFactory : IDesignTimeDbContextFactory<MyContext>
{
public MyContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
optionsBuilder.UseSqlServer("Data Source=MyDatabase");
return new MyContext(optionsBuilder.Options);
}
}