どのように修正するか "新しいcsprojファイルで" dotnet-ef ""コマンドと一致する実行ファイルが見つかりませんでした

.net-core asp.net-core entity-framework-core

質問

Entity Framework CoreでSQLiteを使用したいと思います。私はこの公式チュートリアルに従っています:

.NETコア - 新しいデータベース

それはproject.jsonを次のように変更すると言います:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.0",
    "Microsoft.EntityFrameworkCore.Design": {
      "version": "1.1.0",
      "type": "build"
    }
  },
  "frameworks": {
    "netcoreapp1.1": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        }
      },
      "imports": "dnxcore50"
    }
  },
  "tools": {
    "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4"
  }
}

VS 2017 RCをインストールし、Net Coreがproject.jsonの代わりにcsprojファイルを使用するようになりました。

Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version= "1.1.0-preview4-final"私のcsprojを変更しましたが、コマンドを実行すると、 dotnet ef migrations add MyFirstMigrationた。次のエラーが表示されます。

"一致するコマンドが見つかりません" dotnet-ef ""

これを新しいcsprojでどのように修正できますか?

受け入れられた回答

VS2017は、2017年3月7日に正式にリリースされる予定です。この文書はVS2015に関するもので、最新のVS2017の変更を反映するように更新されていません。このようにcsprojectを変更すると、問題は解決します。

<ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="1.1.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.0" />
  </ItemGroup>

  <ItemGroup>
  <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version = "1.1.0-preview4-final"/>
  </ItemGroup>

この後も、CLIコマンドを使用して最初の移行を実行しようとしたとき:

dotnet ef migrations add MyFirstMigration

私は次のエラーがあります: "パラメータなしのコンストラクタが 'TContext'で見つかりました。 'TContext'にパラメータのないコンストラクタを追加するか、 'TContext'と同じアセンブリ内に 'IDbContextFactory'の実装を追加します。

このドキュメントによれば、これは、デザイン時ツールがアプリケーションでDbContext型のインスタンスを作成する方法を自動的に検出しようとするためです。 EFがDbContextを初期化する適切な方法を見つけられない場合、このエラーが発生する可能性があります。

パラメータのないコンストラクタをセットアップして、次のCLIコマンドでコンテキストを確認できたと確信していました。

dotnet ef database dbContext list

移行を実行する唯一の方法は、プロジェクトにインタフェースIDbContextFactory<TContext>を実装することIDbContextFactory<TContext> 。ドキュメントとそれを行う方法の例は、VS 2015に基づいています。VS 2017 IDbContextFactory<TContext>.Create()は、 DBContextFactoryOptionsをパラメータとしてDBContextFactoryOptionsします。

public class MyContextFactory: IDbContextFactory<MyContext>   
{
    public MyContext Create(DbContextFactoryOptions options)
    {
        var optionsBuilder = new DbContextOptionsBuilder<MyContext>();       
        optionsBuilder.UseSqlite("Filename=./mydatabase.db");

        return new MyContext(optionsBuilder.Options);        
    }
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ