問題タブ [navigation-properties]
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.
c# - Entity Framework - ナビゲーション プロパティを手動で追加する
データベースから Entity Framework Model (4.0) を生成しました。私はデータベースを設計しておらず、スキーマを制御することもできませんが、外部キー制約が定義されていないテーブルがいくつかありますが、暗黙的な関係が定義されています。
例えば:
次の列を持つ People というテーブルがあります。
Gender と Race の両方のテーブルがありますが、People テーブルには外部キーがありません。
モデルをインポートしたときに、これらの関係のナビゲーション プロパティが追加されませんでした。手動で追加しようとしましたが、From Role と To Role が無効になっています。自分で関係を追加する方法がわかりません。どうすればいいですか?
asp.net - Navigation プロパティの DropDownList DataTextField
次のことについて助けが必要です。
Entity Framework データ コンテキストからオブジェクトのリストを取得します。
EntityA はメイン オブジェクト (主キーを含む) ですが、言語固有のプロパティを含む "EntityALanguages" というナビゲーション プロパティがあります。
今、リストをドロップダウンリストにバインドしたいので、ドロップダウンリストから DataValueField および DataTextField プロパティを設定する必要があります。
DataTextField をナビゲーション プロパティのプロパティに設定するにはどうすればよいですか。
編集: ナビゲーション プロパティ「EntityALanguages」はコレクションであるため、EntityA -> EntityALanguages は 1-n の関係です
entity-framework - EntityFrameworkナビゲーションプロパティの正確な目的
次のPOCOをご覧ください。
Currency1のICollectionのようなナビゲーションプロパティが何のために必要か正確にはわかりません。EF CodeFirstに関しては、作成されたデータベース構造に違いは見られません。Currency1とCurrency2のテーブルは、私にはほとんど同じように見えます。では、なぜ、またはいつこのプロパティを追加するのが理にかなっているのでしょうか。
もちろん、POCOについて考えるだけで、Currency2オブジェクトからどの国にもアクセスできないことを理解しています。例えば:
しかし、これが唯一の違いですか?言い換えると、Currency2オブジェクトから国にアクセスする必要がない場合、EFの目的でCurrency2クラスに対応するナビゲーションプロパティを追加する必要はありませんか?ここでちょっと混乱しています...
c# - ナビゲーション プロパティのない外部キー値
レコードを挿入するときに手動で外部キー値を割り当てることは可能ですか?
TransactionScope や同様の構造を使用したくありません。しかし、SaveChanges() を呼び出す前に、foreignkey 値を設定したい
例えば:
wcf - エンティティのナビゲーション プロパティは、WCF サービスを介してプリロードまたは遅延ロードする必要がありますか?
WCF サービスで自己追跡エンティティを使用しています。エンティティは、ナビゲーション プロパティが読み込まれずにクライアントに返されます。
すべてのナビゲーション プロパティを一度に送信するのと、必要に応じて遅延ロードするのとではどちらがよいでしょうか? レイジー ロードの場合、非同期でロードすることをお勧めしますか? これまでに行ったすべての WCF サービス呼び出しでは、await/async キーワードを使用しています。
一部のオブジェクトには、常に使用されるとは限らない多くのナビゲーション プロパティがあるため、一度にすべてをロードすることに懸念があります。たとえば、Consumer エンティティには現在約 20 があり、さらに増えることが予想されます。例としては、住所、電話、ドキュメント、メモなどがあります。ユーザーは独自の作業領域をセットアップできるため、コンシューマが読み込まれるときにドキュメントを操作する人は常に Documents プロパティを必要とする場合がありますが、他のほとんどの人は不要です。
entity-framework - 多くのクエリを作成せずにEntityFrameworkナビゲーションプロパティを使用する(N + 1を回避する)
私はEntityFrameworkProfilerを使用してMVCプロジェクトのデータアクセスをテストしてきましたが、N + 1の問題のために、必要以上に多くのデータベースクエリを実行しているページに出くわしました。
これが私の問題を示す簡単な例です:
ビューはメンバーをループし、各メンバーのナビゲーションプロパティに従って、アドレスも表示します。各アドレス要求により、追加のデータベースクエリが生成されます。
これを解決する1つの方法は、Includeを使用して、必要な追加のテーブルが事前に照会されていることを確認することです。ただし、これは、コンテキストに直接接続されているクラブのObjectSetでのみ実行できるようです。この場合、ActiveClubプロパティは多くのコントローラーで共有されているため、メンバーとアドレステーブルを事前に照会する必要はありません。
次のようなものを使用できるようにしたいと思います。
ただし、MembersはEntityCollectionであり、Includeメソッドがありません。
メンバーEntityCollectionに強制的にロードし、EFにアドレスもロードするように依頼する方法はありますか?
または、この方法でエンティティのEntityCollectionナビゲーションプロパティを使用していますが、これは非常に悪い考えです。コンテキストから取得するときに、何をロードしているのかを知っておく必要がありますか?
entity-framework - 大量のクエリを作成せずに Entity Framework と where クエリを使用する (N+1 を回避する)
私は、Entity Framework Profiler を使用した後に非常にばかげているように見えるデザイン パターンを使用してきました。
エンティティ クラスを拡張して、そのエンティティに関連付けられたコレクションのフィルター処理されたビューであるプロパティを持たせました。このような:
私は主にクラブを離れていないメンバーに関心があるので、このプロパティは非常に便利で、理にかなっているように思えました。
しかし、EF Profiler を実行した結果、これが N+1 の問題を引き起こすことが多いことがわかりました。メンバーをループし、そのアドレスも表示したい場合、アドレスに対する各リクエストは余分な db クエリになります。
この質問から、自分のプロパティを次のように変更できることを知りました。
これにより、この場合の N+1 問題は解消されますが、アドレス情報が常に必要なわけではなく、Member から別のナビゲーション プロパティをたどりたい場合があります。
理想的には、ActiveMembers などのフィルタリングされたプロパティの柔軟性を維持し、クエリに含めるプロパティを後で決定できるようにしたいと考えています。このような:
これは可能ですか、またはフィルタリングされたプロパティのアイデアを再構築する必要がありますか?
odata - ナビゲーション プロパティを使用してリソースを更新できますか?
リソース B を指すナビゲーション プロパティを持つリソース A があります。スキーマは次のようになります。
リソース A:
- ID
- B (これは 1 対多のナビゲーション プロパティです)
リソース B:
- ID
- プロパティ1
- プロパティ 2
A のナビゲーション リンクを使用して、リソース B の値を更新 (つまり、B のプロパティ 1 とプロパティ 2 を更新) できますか? つまり、AB[5].Property1 = x と言えますか?
OData の仕様と例では、B のどのインスタンスが A に関連付けられているかを変更する (つまり、/A(0)/$links/B を変更する) ことの説明のみを参照してください。 A(0)/B(2) を変更し、B 自体を変更します。
odata - 一連のエンティティを更新する方法は?
リソース B のセットを指す「Bs」というナビゲーション プロパティを含むリソース A があるとします。リソース A のインスタンスが与えられた場合、リソース A のナビゲーション プロパティを介してリソース B のセットをバッチ更新できますか?
/A(0)/B(1) に対して PUT/MERGE を実行することで、Bの 1 つのインスタンスを更新できることを知っています。しかし、/A(0)/B へのリクエスト本文で更新された値の配列を使用して PUT/MERGE を実行できますか?
c# - 関連オブジェクトのIDのみが入力されている場合、ナビゲーションプロパティが読み込まれません
私は多対1の関係を確立しようとしています。「多く」を表すエンティティには、親エンティティを指すナビゲーションプロパティがあります。次のようになります。
したがって、上記のエンティティを挿入すると、ProjectIdがアプリケーションからRfiエンティティ(Projectエンティティ全体ではなく)に渡されます。すべてがうまく保存されます。私が抱えている問題は、Rfiオブジェクトをデータベースからプルバックすると、ProjectIdが入力されていますが、Projectエンティティがnullであるということです。デフォルトでは、遅延読み込みを使用しています。Projectエンティティにもナビゲーションプロパティを指定する必要がありますか?私は本当にしたくありません。そうでない限り、これを達成するためにRfiでマッピングを実行できます。
更新:EF 4.1でオブジェクトが読み込まれると想定しましたが、読み込みたいオブジェクトを明示的に含める必要がある場合があります。理由はよくわかりません。リポジトリを使用してエンティティをクエリしています。Rfiオブジェクトのクエリに使用したメソッドは次のとおりです。
私がやったことは、私のサービスレイヤーでは次のように呼んでいます。