EF7 / .NETCoreで複数のデータベースにDbContext継承を実装するにはどうすればよいですか

ピーター

ASP.NET Core1.1でWebAPIを構築しています。

構成、ユーザー、グループ(全部で約25のテーブル)などの構成アイテムの共通の基本スキーマを持つ、(システムごとに)さまざまなデータベースがあります。図に示すように、基本クラスから継承することで、モデルの共有部分の非常に広範なEF構成の重複を回避しようとしています。

私のDbContext継承ツリー

ただし、これはDbContextOptions<DerivedRepository>、コンストラクターにパラメーターとして渡すEntity Framework(EF)要件のため、機能しDerivedRepositoryません。コンストラクターが呼び出されるリポジトリーのタイプと一致する必要があります。次にDbContext、を呼び出してパラメータをベースに渡す必要があります:base(param)

したがって、(たとえば)InvestContextがで初期化されるとDbContextOptions<InvestContext>コンストラクターbase(DbContextOptions<InvestContext>)への呼び出しが必要な型ではなくConfigurationContext型のパラメーターを受け取っているため、InvestContextが呼び出され、EFがエラーをスローしますDbContextのオプションフィールドは次のように定義されているためDbContextOptions<InvestContext>DbContextOptions<ConfigurationContext>

    private readonly DbContextOptions _options;

これを回避する方法がわかりません。

共有モデルを1回定義し、それを複数回使用するための最良の方法は何ですか?ヘルパー関数を作成して、派生したすべてのコンテキストから呼び出すことができると思いますが、継承ほどクリーンでも透過的でもありません。

ピーター

OK、私はこれを次のように継承階層を使用する方法で機能させました(InvestContext例として上から使用):

前述のように、InvestContextクラスは、型のコンストラクターパラメーターを受け取りますがDbContextOptions<InvestContext>、そのDbContextOptions<ConfigurationContext>ベースに渡す必要があります。

DbContextOptions変数から接続文字列を掘り出し、必要なタイプのDbContextOptionsインスタンスを構築するメソッドを作成しました。InvestContextは、base()を呼び出す前に、このメソッドを使用して、オプションパラメーターを適切なタイプに変換します。

変換方法は次のようになります。

    protected static DbContextOptions<T> ChangeOptionsType<T>(DbContextOptions options) where T:DbContext
    {
        var sqlExt = options.Extensions.FirstOrDefault(e => e is SqlServerOptionsExtension);

        if (sqlExt == null)
            throw (new Exception("Failed to retrieve SQL connection string for base Context"));

        return new DbContextOptionsBuilder<T>()
                    .UseSqlServer(((SqlServerOptionsExtension)sqlExt).ConnectionString)
                    .Options;
    }

InvestContextコンストラクター呼び出しはこれから変更されます。

  public InvestContext(DbContextOptions<InvestContext> options):base(options)

これに:

  public InvestContext(DbContextOptions<InvestContext> options):base(ChangeOptionsType<ConfigurationContext>(options))

これまでのところ、InvestContextとConfigurationContextはどちらも単純なクエリで機能しますが、ちょっとしたハックのようで、EF7の設計者が考えていたものではない可能性があります。

複雑なクエリや更新などを試してみると、EFが結び目になるのではないかと心配しています。これは問題ではないようです。以下を参照してください)

編集:私はこの問題をEF7チームの問題としてここに記録しました。チームメンバーは、次のようにEFコアコアへの変更を提案しました。

「TContextが現在のコンテキストタイプから派生したタイプになるようにチェックを更新する必要があります」

これで問題は解決します。

そのチームメンバー(この問題で確認できます)とさらに対話し、EFコアコードを掘り下げた後、上記で概説したアプローチは安全であり、提案された変更が実装されるまで最良のアプローチに見えます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

EF7でこのエラーを修正するにはどうすればよいですか?

分類Dev

MysqlサーバーでEFCore(EF7)を使用するにはどうすればよいですか?

分類Dev

EF7での参照のロード

分類Dev

EF7で同等のdb.database.ExecuteSQLCommand

分類Dev

ASP.NET vNext EF7 dbContext issues

分類Dev

MVC6 / EF7への移行:PluralizingTableNameConvention

分類Dev

モデルがわずかに変更された複数のデータベース。実行時に `EF`が異なるデータベース構造で動作できるようにするにはどうすればよいですか?

分類Dev

EF7がナビゲーションプロパティを熱心に修正するのを防ぐにはどうすればよいですか?

分類Dev

ユニットテスト間でEF7 InMemoryプロバイダーをリセットするにはどうすればよいですか?

分類Dev

継承されたプロパティをEFデータストアに動的に追加するにはどうすればよいですか?

分類Dev

プロジェクト間での共有エンティティ/構成の重複を回避するために、EF7 / .Net Core 3に抽象DbContextを実装するための優れたパターンはありますか?

分類Dev

EF7(コア)OnModelCreatingでカスタム属性を使用する

分類Dev

Windows 7のPostgreSQLでデータベースを作成するにはどうすればよいですか?

分類Dev

AzureでのDNX(EF7)データベース移行の実行

分類Dev

複数のDBContextを使用したEF7の移行

分類Dev

EF7はSQLiteで間違った移行を生成します

分類Dev

Powershellを使用してリモートデータベースでEntityFramework 7の移行を実行するにはどうすればよいですか?

分類Dev

最初にデータベースEFモデルから既存のコードにテーブルを追加するにはどうすればよいですか?

分類Dev

Windows 7の複数のモニターに拡張デスクトップをセットアップするにはどうすればよいですか?

分類Dev

EF7エラー挿入デフォルト日付

分類Dev

EFを使用してMVC4の複数のビューから複数のデータベースレコードを保存するにはどうすればよいですか?

分類Dev

EF7とGroupBy()は翻訳できません

分類Dev

Entity Framework Core 1(EF7)の.HasOptionalに相当

分類Dev

Entity Framework Core 1(EF7)の.HasOptionalに相当

分類Dev

リストボックスの値をMVC4およびEFのデータベースに保存するにはどうすればよいですか?

分類Dev

MVC6 EF7 Viewcomponentajax更新の問題

分類Dev

web.configのASP.NET5 / EF7接続文字列?

分類Dev

EF7を使用してカスタムSQLクエリを実行することは可能ですか?

分類Dev

EF 7ベータ6:EF7で1対多の関係を持つエンティティ

Related 関連記事

  1. 1

    EF7でこのエラーを修正するにはどうすればよいですか?

  2. 2

    MysqlサーバーでEFCore(EF7)を使用するにはどうすればよいですか?

  3. 3

    EF7での参照のロード

  4. 4

    EF7で同等のdb.database.ExecuteSQLCommand

  5. 5

    ASP.NET vNext EF7 dbContext issues

  6. 6

    MVC6 / EF7への移行:PluralizingTableNameConvention

  7. 7

    モデルがわずかに変更された複数のデータベース。実行時に `EF`が異なるデータベース構造で動作できるようにするにはどうすればよいですか?

  8. 8

    EF7がナビゲーションプロパティを熱心に修正するのを防ぐにはどうすればよいですか?

  9. 9

    ユニットテスト間でEF7 InMemoryプロバイダーをリセットするにはどうすればよいですか?

  10. 10

    継承されたプロパティをEFデータストアに動的に追加するにはどうすればよいですか?

  11. 11

    プロジェクト間での共有エンティティ/構成の重複を回避するために、EF7 / .Net Core 3に抽象DbContextを実装するための優れたパターンはありますか?

  12. 12

    EF7(コア)OnModelCreatingでカスタム属性を使用する

  13. 13

    Windows 7のPostgreSQLでデータベースを作成するにはどうすればよいですか?

  14. 14

    AzureでのDNX(EF7)データベース移行の実行

  15. 15

    複数のDBContextを使用したEF7の移行

  16. 16

    EF7はSQLiteで間違った移行を生成します

  17. 17

    Powershellを使用してリモートデータベースでEntityFramework 7の移行を実行するにはどうすればよいですか?

  18. 18

    最初にデータベースEFモデルから既存のコードにテーブルを追加するにはどうすればよいですか?

  19. 19

    Windows 7の複数のモニターに拡張デスクトップをセットアップするにはどうすればよいですか?

  20. 20

    EF7エラー挿入デフォルト日付

  21. 21

    EFを使用してMVC4の複数のビューから複数のデータベースレコードを保存するにはどうすればよいですか?

  22. 22

    EF7とGroupBy()は翻訳できません

  23. 23

    Entity Framework Core 1(EF7)の.HasOptionalに相当

  24. 24

    Entity Framework Core 1(EF7)の.HasOptionalに相当

  25. 25

    リストボックスの値をMVC4およびEFのデータベースに保存するにはどうすればよいですか?

  26. 26

    MVC6 EF7 Viewcomponentajax更新の問題

  27. 27

    web.configのASP.NET5 / EF7接続文字列?

  28. 28

    EF7を使用してカスタムSQLクエリを実行することは可能ですか?

  29. 29

    EF 7ベータ6:EF7で1対多の関係を持つエンティティ

ホットタグ

アーカイブ