Scaffold-DbContext
でPackage Manager Console
コマンドを使用して、既存のSQLServerデータベースのコンテキストとエンティティを作成および再作成します。
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
など)にすることを好みます。 Web検索に加えて、コマンド構文を確認しました。
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
名を複数形にする方法は?
UPDATE 2017-04:DBFirstスキャフォールディングの複数化がEntityFramework Core1.1で可能になりました。詳細については、以下の私の 回答 をお読みください。
Install-Package Bricelam.EntityFrameworkCore.Pluralizer
Scaffold-DbContext
コマンドを実行しますScaffold-DbContext -Connection "Server=<server>;Database=<dbname>;user id=<userid>;password=<pwd>;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Data/EFModels/
@ natemcmasterのコメントで@ KalinKrastevが指摘しているように回答。 EF Coreでの複数化は、を使用してインストールできるBricelam.EntityFrameworkCore.Pluralizer
というパッケージを使用して可能です。
パッケージマネージャーコンソール(PMC)または
dotnet add package Bricelam.EntityFrameworkCore.Pluralizer
dotnetcliを使用します。
パッケージをインストールした後、通常のScaffold-DbContext
コマンドを使用するだけです。
Scaffold-DbContext -Connection "Server=<server>;Database=<dbname>;user id=<userid>;password=<pwd>;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Data/EFModels/ -Force
EF Core1.1では複数化が可能です。 Rowan Miller ブログで説明 のように、Inflectorをインストールし、IDesignTimeServices
を実装して、スキャフォールディング時に複数化を制御する必要があります。ただし、次の点に注意してください。
これらのサービスを* .internal名前空間に配置し、いつでもAPIを破壊する権利を留保します。
したがって、完全なコード例がここにコピーされないのはこのためです。この答えは同じ理由で受け入れられません-私は安定したAPIを取得するまで待つことを好みます。
考慮すべきもう1つの問題-このソリューションはプロバイダーに依存します。 SQL Serverで正常に動作します(私はそれをテストしました)。別のDBMSプロバイダーがこのAPIをまだサポートしていない可能性があります。たとえば、最新の Npgsql.EntityFrameworkCore.PostgreSQL 1.1.0は、カスタムIDesignTimeServices
が使用されている場合にscaffoldで失敗します。
RC1以降、EF7では複数化はサポートされていません。 EF7スキャフォールディングのこれと他の制限はここで追跡されています: https://github.com/aspnet/EntityFramework/issues/4038