web-dev-qa-db-ja.com

EntityFramework Core2.0-移行エラー「EntityFrameworkパッケージがインストールされていません」を追加

Entity Framework Coreの移行をコードファーストプロジェクトに追加しようとするとエラーが発生します。詳細は次のとおりです...

新しいASP.NetCore Webプロジェクト(VS2017のCore2.0)を作成しました。以下に示すように、Microsoft.AspNetCore.All依存関係を使用します。

enter image description here

私はEntityFramework Coreを利用しようとしています(私の理解では、すべてのメタデータにはすでにEF Coreの依存関係が含まれており、以下に示すように、正しいように見えます):

enter image description here

エンティティとコンテキストを設定し、次のコードを使用してデータベースが設定されていることを確認しました。

モデルの例

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;
    }
}

データベースが正常に作成されていることがわかります。これまでのところ、すべて問題ありません。

enter image description here

次のコマンドを使用してデータベースのスナップショットを撮りたい:PM> Add-Migration CityInfoInitialMigration

しかし、エラーが発生します:EntityFrameworkパッケージがプロジェクト 'CityInfo.API'にインストールされていません。

enter image description here

誰かがこれに遭遇したことがありますか? EFパッケージを明示的に追加しようとしましたが、それも機能しませんでした。

7
Rob McCabe

次の記事で、コマンドラインインターフェイスを使用してこの問題を回避することができました。

https://docs.Microsoft.com/en-gb/aspnet/core/data/ef-mvc/migrations#introduction-to-migrations

2
Rob McCabe
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                                                                                                                                                                                                                                      

EntityFrameworkCoreEntityFrameworkの両方のNugetパッケージがプロジェクトにインストールされていることを意味します。これにより、

EntityFrameworkパッケージがインストールされていません

私の場合、EntityFramework 6.0.0を参照しているNugetパッケージを参照していました(したがって、EntityFrameworkパッケージが間接的に参照されました)。そのパッケージを削除した後、エラーが修正されました。

このような参照を見つける最も簡単な方法は、Search Solution Explorerダイアログを使用することです。

enter image description here

9
tchelidze

Microsoft.EntityFrameworkCore.Toolsパッケージがインストールされていることを確認してください。このパッケージは、EFコアのPMCコマンドを定義します。

4
rick