質問: Microsoft.Data.Entity.QueryTrackingBehavior.NoTracking; ``` ここでの欠点は、モデルグラフを使用することができず、すべてをより複雑にすることです。 4を編集... --------
回答: 場合によってはトラッキングクエリが役に立たないと思うのは当然ですが、DbContextのインスタンスを複数作成する必要がある場合もあります。 通常は、起動時に`AddDbContext()`メソッドを使用して、要求ごとにコンテキストタイプのインスタンスが作成され、適切な`DbContextOptions`とサービスプロバイダが設定されていることを確認します。このパターンから逸脱する必要がある場合、いくつかのオプションがあります。例: 1. 派生したDbContextクラスに`IServiceProvider`をとり、それを基本コンストラクタに渡すコンストラクタを含めます。コントローラが`IServiceProvider`いることを確認します。これを行うと、次のような`DbContext`で`DbContext`手動で作成することができます。 `using(var context1 = new MyDbContext(serviceProvider), var context2 = new MyDbContext(serviceProvider)) { ...` 2. 派生した`DbContext`型のコンストラクタシグネチャを変更する必要がないようにするには、 `DbContextActivator`クラス(内部名前空間です)を利用できます。 `using(var context1 = DbContextActivator.CreateInstance(serviceProvider), var context2 = DbContextActivator.CreateInstance(serviceProvider) {...` 注意:起動時にまだ`AddDbContext(options => ...)`している場合は、それらのオプションを自動的にサービスプロバイダから`AddDbContext(options => ...)`する必要があります。しかし、 `DbContextOptions`をコンストラクタのパラメータとしてインクルードするか、またはそのための`OnConfiguring()`メソッドをオーバーライドすることもできます。 私は、使用ブロックで2つの別々の`DbContexts`を作成する例を挙げていますが、コントローラのコンストラクタに注入される通常の「要求ごとの」DbContextとそれらを混在させることもできます。 現在利用可能なこれらのオプションに加えて、同じリクエストで同じ`DbContext`型の複数のインスタンスを作成する方法に関するその他の改善点を追跡するための新しい問題を作成しました。