Entity Framework 7の規約をどのように設定しますか?

ef-code-first entity-framework entity-framework-core

質問

EF7の前に、以下のスニペットを使用して慣例を削除しました。

protected override void OnModelCreating(DbModelBuilder builder)
{
      builder.Conventions.Remove<NavigationPropertyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<PluralizingTableNameConvention>();
      builder.Conventions.Remove<PrimaryKeyNameForeignKeyDiscoveryConvention>();
      builder.Conventions.Remove<TypeNameForeignKeyDiscoveryConvention>();
}

Entity Framework 7で同じ結果を達成するにはどうすればよいですか?

受け入れられた回答

規約のAPIは現在安定していません。 https://github.com/aspnet/EntityFramework/issues/2589を参照してください

これを行うことはできますが、 OnModelCreatingがコンテキスト上でどのようにOnModelCreatingれるかの内部的な動作をオーバーライドするためには、依存関係注入を使用する必要があります。 DbContextは依存関係注入を使用して、モデルビルダ(および規約)を提供するModelSourceインスタンスを検索します。

モデルソースをオーバーライドするには、独自の実装を依存関係インジェクションに追加します。

    var serviceCollection = new ServiceCollection();
    serviceCollection
        .AddEntityFramework()
        .AddSqlServer();
    serviceCollection.AddSingleton<SqlServerModelSource, MyModelSource>();
    var serviceProvider = serviceCollection.BuildServiceProvider();

    using(var context = new MyContext(serviceProvider))
    {
        // ...
    }

MyModelSource実装は、 MyModelSource ModelSource.CreateConventionSet()をオーバーライドする必要があります。 元のソースはこちら



Related

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