質問: false;`つまり、 `.Include()`どこかで使用した後、 `NullReferenceExceptions`を取得します。テストでは、これらのタイプのエラーをキャッチすることができます。 私たちのテストのセットアップは、基本的に以下の通りです: 1. Effortの接続ファクトリを使用してdb接続を作成します。これは、テストごとに固有の接続インスタンス(永続的な接続を試みるときに一意のキーを持つ)です。 2. その接続でdbコンテキストを作成し、テスト用に存在させるデータを追加します。 3. DIコンテナにdbコンテキスト用のサービスオーバーライドを登録します。 問題は、テストセットアップ中のコンテキストに追加したものは、テスト対象のコードが実行されているときに既にロードされているように見えるので、Effort.EF6を遅延ロードを許可しないように設定する方法はわかりません。例外を参照してください。これは、テストセットアップと実際のコード実行の間にコンテキストインスタンスを再利用しているためです。 3つ目のステップを次のように切り替えると、 3. dbコンテナのDIコンテナにサービスオーバーライドを登録します。 4. DIコンテナはdbコンテキストインスタンスを作成します(db接続を注入された依存関係として扱います) 代わりに*空の* DBコンテキストになります。つまり、テストを実行する前にいくつかのデータポイントを追加しても、データはありません。 Effortを使用してdbコンテキストを構築して注入するにはどうすればいいですか`.Include()`ステートメントがない場合は失敗しますが、 `.Include()`場合は`.Include()`ますか?
回答: Effort.EF6のコンストラクタでも、 `DbConnection`オブジェクトを使用するコンストラクタでそれを無効にする必要が`DbConnection`ます。 私は以下のようなEF Code Firstプロジェクトのためにそれを解決しました: ``` public class MyDataContext : DbContext, IMyDataContext { /* * the ohter stuff like IDbSet etc. */ public MyDataContext() : base("name=MyConnectionString") { Configure(); } /// /// This constructor is for test usage only! /// /// Test connection for in memory database public MyDataContext(DbConnection connection) : base(connection, true) { Configure(); } /// /// Configures the data context. /// private void Configure() { Configuration.LazyLoadingEnabled = false; } } ``` さらに私のテストプロジェクトでは、テスト用のCSVファイルを設定しています。このファイルは、Effort.EF6によって使用され、シードされたデータでコンテキストをインスタンス化します。私のケースでは、特定のファイルを持つ特定のテーブルをシードする可能性を与える小さなTestDataManagerを作成しました。 Effort.EF6でデータをシードできるコードの例を次に示します。 ``` IDataLoader loader = new CsvDataLoader(@"C:\Temp\Test_CSV_Files"); DbConnection dbConnection = DbConnectionFactory.CreateTransient(loader); var myDataContext = new MyDataContext(dbConnection); ``` 多分このブログの投稿があなたを助けるかもしれません。