Entity Framework Coreの移行をコードファーストプロジェクトに追加しようとするとエラーが発生します。詳細は次のとおりです...
新しいASP.NetCore Webプロジェクト(VS2017のCore2.0)を作成しました。以下に示すように、Microsoft.AspNetCore.All依存関係を使用します。
私はEntityFramework Coreを利用しようとしています(私の理解では、すべてのメタデータにはすでにEF Coreの依存関係が含まれており、以下に示すように、正しいように見えます):
エンティティとコンテキストを設定し、次のコードを使用してデータベースが設定されていることを確認しました。
モデルの例
public class City
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[MaxLength(200)]
public string Description { get; set; }
}
コンテキストの例
public class CityInfoContext : DbContext
{
public DbSet<City> Cities { get; set; }
public DbSet<PointOfInterest> PointsOfInterest { get; set; }
public CityInfoContext(DbContextOptions options) : base(options)
{
Database.EnsureCreated();
}
}
Startup.cs Config
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddMvcOptions(options => {
options.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
})
.AddJsonOptions(options => {
if (options.SerializerSettings.ContractResolver != null)
{
var res = options.SerializerSettings.ContractResolver as DefaultContractResolver;
res.NamingStrategy = null;
}
});
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IMailService, LocalMailService>();
// Entity Framework services.
var connectionString = @"Server=(localdb)\mssqllocaldb;Database=CityInfoDB;Trusted_Connection=True;";
services.AddDbContext<CityInfoContext>(options => options.UseSqlServer(connectionString));
}
私のコントローラーでこの行を使用してdbconextを初期化しています:
public class DummyController : Controller
{
CityInfoContext _ctx;
public DummyController(CityInfoContext ctx)
{
_ctx = ctx;
}
}
データベースが正常に作成されていることがわかります。これまでのところ、すべて問題ありません。
次のコマンドを使用してデータベースのスナップショットを撮りたい:PM> Add-Migration CityInfoInitialMigration
しかし、エラーが発生します:EntityFrameworkパッケージがプロジェクト 'CityInfo.API'にインストールされていません。
誰かがこれに遭遇したことがありますか? EFパッケージを明示的に追加しようとしましたが、それも機能しませんでした。
次の記事で、コマンドラインインターフェイスを使用してこの問題を回避することができました。
https://docs.Microsoft.com/en-gb/aspnet/core/data/ef-mvc/migrations#introduction-to-migrations
NPM> Get-Module
結果にEntityFramework
が含まれている場合
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 6.0.0.0 EntityFramework {Add- EFDefaultConnectionFactory, Add-EFProvider, Add-Migration, Enable-Migrations...}
Script 2.0.0 EntityFrameworkCore {Add-Migration, Drop-Database, Enable-Migrations, Get-DbContext...}
Script 2.0.0.0 NuGet {Add-BindingRedirect, Find-Package, Get-Package, Get-Project...}
Script 0.0 profile
EntityFrameworkCore
とEntityFramework
の両方のNugetパッケージがプロジェクトにインストールされていることを意味します。これにより、
EntityFrameworkパッケージがインストールされていません
私の場合、EntityFramework 6.0.0
を参照しているNugetパッケージを参照していました(したがって、EntityFramework
パッケージが間接的に参照されました)。そのパッケージを削除した後、エラーが修正されました。
このような参照を見つける最も簡単な方法は、Search Solution Explorer
ダイアログを使用することです。
Microsoft.EntityFrameworkCore.Toolsパッケージがインストールされていることを確認してください。このパッケージは、EFコアのPMCコマンドを定義します。