問題タブ [dbcontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unit-testing - リポジトリの単体テストのポイントはありますか? エンティティ フレームワーク 4.1
私はさまざまなビデオを見たり、リポジトリの単体テストに関するさまざまなブログを読んだりしています。
最も一般的なパターンは、本物と同じインターフェースを実装する偽のリポジトリを作成することです。次に、偽物は内部辞書または何かを使用します。
したがって、実際には、本番環境には決して入らない偽のリポジトリのロジックを単体テストしています。
これで、依存性注入を使用して、IDBContext インターフェイスを使用してモック DBContext を注入できます。ただし、実際にはdbcontext(モックされている)に転送する各リポジトリメソッドをテストしているだけです。
各リポジトリ メソッドが dbcontext を呼び出す前に多くのロジックを持っていない限り、それは少し無意味に思えますか?
テストを統合テストとしてリポジトリに置いて、実際にデータベースにヒットさせる方が良いと思いますか?
新しい EF 4.1 では、テスト プロジェクトの接続文字列に基づいてオンザフライでデータベースを作成できるため、これが簡単になり、dbcontext.Database メソッドを使用してテストを実行した後にデータベースを削除できます。
asp.net-mvc-3 - EF 4.1 POCO Db.Entry() 後のナビゲーション プロパティへのアクセス
問題
これを行う正しい方法がわからない...私は単純なクラスを持っています:
私の MVC 3 プロジェクトには、イベントの説明を編集し、(オプションで) ドロップダウン リストから前のイベントを選択するために使用するフォームがあります。フォームはアクションに送信され、通常の MVC 3 と同様に、自動的に にマップされますEvent
。
PreviousEvent
エンティティを保存する前に、アクセスが必要な追加の検証を行いたいと思います。ただし、ナビゲーション プロパティはnull
、上記のコードでアクセスするときは常にです。これは理にかなっています。フォームはEvent
、EF によって作成されたプロキシではなく、私の POCO クラスに直接マップされます。
質問
Event
EF がナビゲーション プロパティの読み込みを支援できるように、変更したものをプロキシに交換する方法はありますか? 私はそれをできた:
...しかし、この方法ですべてのナビゲーション プロパティを読み込むのは平凡に思えます (このクラスには、示されているよりも多くの機能があります)。本当にそうですか?
c# - EF +汎用リポジトリ+ロード関連エンティティ:明示的なロードのみが機能します
2つの単純なPOCOクラスがあります。MyY
のインスタンスを使用して、以下のプロパティをハイドレイト化しようとしていますY
。私はこれを行うためにいくつかの方法を試しましたが、明白または単純なものが欠けている可能性があると思います。
DbContext
のコンストラクターのサブクラスで、この呼び出しを介して遅延読み込みをオフにしました。
取得するときX
に私は試しました
うまくいきませんでした。私は試した
これは機能しますが、データベースへの2回のラウンドトリップが必要です。私は試した
これも機能しますが、モデルを「弱く」します(通常、新しいタイプに投影することはそれほど悪くありませんが、これらのEF POCOの「形状」は、後でWCFを介して送信するDTOに対して完全に機能します)。
別の質問への回答で提案されているように、私は最終的virtual
にプロパティから削除しようとしましたが、それはまったく効果がありませんでした。MyY
最後に、汎用リポジトリパターンを使用します。私が最終的に得たのは、部分的に示されている次の設計です。これは、正しく機能するように変更すると、明示的負荷(推奨されません)と熱心な負荷をサポートします。単一のdbラウンドトリップeager-loadを取得するように変更するにはどうすればよいですか?
使用例:
回答に基づく更新:
私の一時的なコード例が嘘をついていることがわかりました(上記のワンライナー)。.Include
私は実際にの結果をローカル変数にキャッシュしましたが、の結果ではなく.FirstOrDefault
に対して適用しました。の修正は次のとおりです。これは、関連する質問で他の人が提案したことを反映しています。.Set<X>
.Include
ApplyEagerLoading
entity-framework - 「N+1」+カウントの問題に対処する正しい方法は何ですか?
次のようなモデルを想定します。
投稿/インデックスページに、各投稿のコメント数(すべての投稿のコメントの総数ではない)とともに投稿のリストを表示したいと思います。
1:使用する場合
関連するすべてのコメントのエンティティ全体が読み込まれます。実際、必要なのはコメントの数だけです。
2:各投稿の数を1つずつ取得する場合:
それはN+1の問題です。
誰かが正しい方法を知っていますか?
ありがとうございました!
entity-framework-4.1 - Entity Framework 4.1で自己追跡エンティティとDBContextを使用できますか?
DBContext(EF 4.1)が自己追跡エンティティをサポートしているかどうか知りたいです。はいの場合、どうすればそれを行うことができますか?
c# - N 層アプリケーションの複数の DbContext
私は初めての N 層 MVC アプリケーションを作成DbContexts
していますが、データベース ファーストのアプローチで複数を管理する方法に問題がありました。
次のレイヤーがあります
サービス層にエンティティ フレームワークの参照は必要ありませんが、2 つのコンテキストを管理するためのインターフェイスまたは何かを作成する方法がわかりません。IDatabaseFactory でワープされた単一のコンテキストで動作していますが、2 つを管理する方法が見つからないようです。
以下は私の Service ctor で作成されたものですが、実際には別のコンテキストがあるのに、UnitOfWork
私はそれを見るたびに に縛られています。SiteModelContainer
ef-code-first - EntityFrameworkコードの最初のDBContextObjectStateManagerエラー
エラーが発生しました" An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
"
CheckIfNameChanged(TestObject testObject)メソッドを呼び出すときに、ObjectContextにエンティティキーを追加し、_unitOfWork.TestObjectRepository.Update(testObject)を呼び出すときにコードをアタッチまたは編集するときに、次のことを知っています。
ここで競合が発生し、ObjectStateManagerで2つの同じエンティティキーを取得しました。コンテキストに移動してエンティティをデタッチせずにこの問題を解決する方法はありますか、それとも他の方法がありますか?そして、コンテキストからエンティティを切り離すための最良の方法は何ですか?
c# - DbContext は再利用のために接続を開いたままにしない
TransactionScope
MSDTC を呼び出さずに を使用して複数のデータベース操作を実行できるように、既存のデータベース接続を再利用しようとしています。
Entity Framework ( DbContext
4.1 リリースの新しい API を使用) は、明示的に開かれた接続を開いたままにしたくないようです。古いObjectContext
API は、期待どおりに接続を開いたままにし、文書化されています。
DbContext
APIは内部で使用するだけなので、ObjectContext
同じ動作を期待していました。この変更が意図されたものなのか、それとも既知の問題なのか、誰にもわかりませんか? どこにも文書化されていません。
asp.net-mvc-3 - MVC 3、EF4、Code first データベース初期化エラー
Initializer を使用して DB を設定しようとすると、いくつかの問題が発生します。LabTest->LabValue<-LabIndicator という 3 つのテーブルがあり、次のようにコーディングします。
これは、DBContext で Db Intializer をコーディングする方法です。
問題は、それを実行すると、EF がデータベースを作成しようとすると、次のエラーが発生することです。
INSERT ステートメントが FOREIGN KEY 制約 "LabIndicator_LabValues" と競合しました。データベース「SummumnetDB」、テーブル「dbo.LabIndicators」、列「ID」で競合が発生しました。ステートメントは終了されました。解決できることを願っています、ありがとう。
.net - エンティティ フレームワーク (4.1) のクエリを実行すると、DbContext が結果を返さない
SQL Server 2008 R2 Express で Entity Framework 4.1 を使用します。
データベース内のテーブル [Users] を表す IDbSet<Users> プロパティを持つ、厳密に型指定された DbContext (コード内の ctx) があります。私が実行すると:
そのテーブルにはレコードがありますが、データベースに何もないかのように、 result.Countは0です。ctx.Database.Connection を確認しましたが、正しい接続文字列があります。
私は実行しました
実行されるSQLを取得し、SQL管理スタジオで特定のステートメントを実行すると、ユーザーのリストを取得します.
クエリが実行されていないようで、何が問題なのか特定できません。