Entity Framework Coreで複数のDbSetプロパティ名を使用してDbContextをスカッフォールドする方法

c# entity-framework entity-framework-core sql-server visual-studio-2015

質問

Package Manager ConsoleScaffold-DbContextコマンドを使用してScaffold-DbContext SQL Serverデータベースのコンテキストとエンティティを作成して再作成します。

Scaffold-DbContext -provider EntityFramework.MicrosoftSqlServer -connection "my connection string"

DbSetのプロパティ名は単数形です:

public partial class MyDbContext : DbContext
{
    public virtual DbSet<Request> Request { get; set; }
    public virtual DbSet<RequestHeader> RequestHeader { get; set; }
}

私はこれらの名前が複数形( Requestsなど)であることを好みます。ウェブ検索に加えて、私はコマンド構文をチェックしました:

get-Help Scaffold-DbContext -detailed

この動作を変更するものは何も見つかりませんでした。ここに私のpackages.config

<packages>
  <package id="EntityFramework.Commands" version="7.0.0-rc1-final" targetFramework="net46" />
  <package id="EntityFramework.Core" version="7.0.0-rc1-final" targetFramework="net46" />
  ...
</packages>

足場をDbSetときにDbSet名を複数形にする方法は?

UPDATE 2017-04: DB Entity Framework Core 1.1では、複数のスキャフォールディングの複数化が可能になりました。詳細は下記の私の答えを読んでください。

受け入れられた回答

RC1のEF7では複数化はサポートされていません。 EF7足場のこれと他の限界は、ここで追跡されています: https : //github.com/aspnet/EntityFramework/issues/4038


人気のある回答

EF Core 1.1では複数のバージョンが可能です。 Rowan Miller氏のブログ説明したように、 IDesignTimeServicesをインストールし、 IDesignTimeServicesフォールディング時に複数化を制御するIDesignTimeServicesを実装する必要があります。ただし、それに注意してください:

これらのサービスを* .internal名前空間に入れ、APIをいつでも破棄する権利を留保します。

だからこそ、完全なコード例はここにコピーされません。この答えは同じ理由で受け入れられません。私は安定したAPIが得られるまで待つことを好みます。

考慮すべきもう1つの問題 - この解決策はプロバイダに依存します。それはSQL Serverでうまく動作します(私はそれをテストしました)。別のDBMSプロバイダはこのAPIをまだサポートしていないかもしれません。たとえば、最新のNpgsql.EntityFrameworkCore.PostgreSQL 1.1.0は、カスタムIDesignTimeServicesが使用されている場合、スキャフォールドで失敗します。



Related

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