問題タブ [eager-loading]
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.
entity-framework - エンティティへのLinq-entitycollectionにwhere条件を持つエンティティを選択する方法は?
同じ質問をする人を何度か見つけましたが、(理論的には)かなり簡単なはずですが、答えは決して満足のいくものではなかったようです。これが私の質問です:
「Company」というエンティティがあり、その中にentityCollection「Employees」(1対多)があります。すべての会社を取得する必要があり、それぞれについて、21歳を超える年齢の従業員のみが必要です。
私は試した :
21を超える会社が少なくとも1つある場合は、各会社のすべての従業員が表示されるため、これは機能しません(実際には、.Any()と同じです)。
私は試した :
これも機能しませんでしたが(完璧だったと思いますが)、次のエラーが発生します。エンティティまたは複合型'MyModel.Company'をLINQtoEntitiesクエリで作成できません。
21歳以上の従業員だけですべての会社を選択するにはどうすればよいですか?現時点では、すべてを選択し、クライアント側で従業員をフィルタリングしていますが、そのソリューションは好きではありません。
誰かが私を助けることができますか?
Morteza Manavi-Parastに感謝します、それは仕事をします!
それでも、一意のクエリで実行することがEntityFrameworkに実装されていないことを私はほとんど確信していません。それはとても一般的な状況です...証明として、このフォーラムには私のような質問がたくさんあります。
私は驚いています...多分次のリリースのために?
明確にするために、クエリの結果をデータグリッドに直接バインドしているため、会社のリストが必要です。参考までに、データグリッドの行をクリックすると(会社を選択すると)、entityCollectionからの従業員(21歳以上)が入力された2番目のグリッドがあります。
nhibernate - 存在しない多対1の関係のためのNHibernateダブルフェッチ
私はいくつかの多対1の関係を持つエンティティを持っており、次のような1つのクエリでそれらを熱心にフェッチできることがわかりました。
ただし、関係は常に存在するわけではなく、次のようにマッピングを定義しました。
関係が存在しない場合、NHibernateはそれを探す2番目のSQLクエリを生成したことがわかりました。これは、おそらくプロパティがnullであることが判明したためです。
私の最初の質問は、どうすればこの2番目のSQLクエリを防ぐことができるかということです。
私の2番目の質問は、このフェッチを1つのクエリにまとめる簡単な方法はありますか?多対1の関係ごとに個別のクエリではなく、1つのクエリですべてをフェッチするのは非常に基本的な動作のようです(これはデフォルトの動作のようです)。
java - 遅延ロードされたプロパティの積極的なロードを強制する
プロパティがすべて遅延してロードされるHibernateオブジェクトがあります。これらのプロパティのほとんどは、他の Hibernate オブジェクトまたは PersistentSet です。
ここで、Hibernate にこれらのプロパティを 1 回だけ熱心にロードさせたいと考えています。
もちろん、これらの各プロパティに「触れる」こともできますobject.getSite().size()
が、目標を達成する別の方法があるかもしれません。
c# - Entity Framework 4 抽象モデル - プログラムでナビゲーション プロパティをイーガー ロードする方法は?
抽象エンティティ/クラスで構築された EF4 モデルがあります。
StateエンティティにCountryというナビゲーション プロパティがあることに注目してください。
注: 遅延読み込みが無効になっているため、オンデマンドで熱心に読み込む必要があります。
さて、次の方法がある場合:
デフォルトでは、関連付けは返されません。しかし、明示的にしたいときに、どうすればアソシエーションを動的にeager-loadできますか?
これはできない:
「Country」というナビゲーション プロパティを持たないLocationという抽象クラスを使用しているためです。で実際にクエリを実行するまで、派生型が何であるかはわかりません.SingleOrDefault
。
だから、ここに私がしなければならなかったことがあります:
基本的に、私は2つの同一の呼び出しを行っています。それは機能しますか?はい。それはきれいですか?いいえ、実際には「熱心な読み込み」ではありません。
これが正しい解決策ではないことはわかっています。適切な解決策を考えてもらえますか? (はい、ストアド プロシージャを使用できることはわかっていますが、ここでリポジトリ/モデルを実際に調べたいので、エンティティがグラフに正しくアタッチされ、編集の準備ができています)。
Left Outer Joinが.Include
発生しますが、問題は「場所」エンティティ セットで作業していることです。「州」を必要と.Include
しますが、「州」は「場所」エンティティ セットに属します (派生クラスは親のエンティティ セットに属します)。
したがって、私の質問は実際にはかなり一般的なものだと思います-子が何であるかが事前にわからない場合、抽象エンティティの子に.Includeを行うにはどうすればよいですか?
.OfType<T>()
T が何であるかがわからない (呼び出しコードもわからない) ため、最初に (そして派生型の .Include を)使用できないことを覚えておいてください。したがって、ここではジェネリックを使用できません。
nhibernate - mvcアプリケーションでのlinq to nhibernateとeager loadingの問題
こんにちは、linq で nhibernate 3.0 を使用してデータベースからデータを取得する次のコードがあります。
それをビューに渡そうとすると、あまり具体的ではない次のエラーが発生します。これは、次を使用して熱心にロードしていないときにうまく機能しました-
しかし、他のエンティティが遅延ロードされるたびに別のクエリを作成していました。誰かがこれを前に見たことがありますか?それは私を正しい方向に向けることができるかもしれません. ご意見ありがとうございます。
google-app-engine - GAE Datastore は熱心なフェッチをサポートしていますか?
本とその著者のリストを表示したいとしましょう。従来のデータベース設計では、1 つのクエリを発行しBook
て、関連するAuthor
テーブルだけでなくテーブルからも行を取得していました。これは、恐ろしいN+1 選択の問題を回避するために行われます。レコードが遅延して取得された場合Author
、私のプログラムは著者ごとに個別のクエリを発行する必要があります。おそらくリストにある本の数と同じ数のクエリです。
Google App Engine Datastore は同様のメカニズムを提供していますか、それとも N+1 選択の問題はこのプラットフォームではもはや関係ないものですか?
entity-framework - EF4 LINQ Ordering Parent and all child collections with Eager Loading(.Include())
グリッド上で階層データバインディングを実行していますが、データベースサーバーにオブジェクトの並べ替えを実行させる必要があります。親コレクションは簡単に並べ替えることができますが、すべての子コレクションも並べ替える方法がわからないようです。子コレクションが3つの深さでネストされているモデルがあり、これらのコレクションはすべて並べ替える必要があります。
これが私が達成しようとしていることのサンプルモデルです:
「Year」オブジェクトのリストを読み込もうとしています。これには、色のコレクションを持つモデルのコレクションを持つメイクのコレクションがあります。これらのオブジェクトはすべて、nameプロパティに基づいて並べ替える必要があります。
私はこれをやってみました:
しかし「それ」。は、選択されているテーブルのエイリアスにすぎません...この場合は「Years」です。子テーブルのエイリアスを作成して、単一のクエリで子テーブルでも並べ替えを実行できるようにする方法はありますか?
.net - .Net4 Link-to-EF での Eager Loading; 多分DataLoadOptionsのように
私は VS2010 .Net4 Linq-to-EntityFramework を使用しており、子データを明示的に熱心にロードしたいと考えています。Linq-to-SQL IIUC では使用できますが、Linq-to-EF では使用できないDataLoadOptionsまたはLoadWithと同様の機能を提供したいと考えています。
(余談ですが、これは後でテスト中に再生するデータを記録できるようにするためです。遅延読み込みを使用しており、これらの発生を見つけて熱心な読み込みに置き換える必要があります。DataLoadOptionsメソッドを使用すると、これを実装するクリーンな方法が可能になります。 .)
MosesOfEgypt ブログで説明されているように、タイプセーフな熱心な読み込みスキームを提供しようとしています。T4 の世代を変更しましたが、最後の問題だと思います。.Net4 では、エンティティ プロパティはObjectSetを返します。しかし残念なことに、Include関数はObjectSetの基本クラスであるObjectQueryを返します。
以下は、変更された T4 テンプレートから生成された ObjectContext クラスのサブセットです。
「 * 」で始まる行は、 ObjectQueryからObjectSetへのキャストが行われる場所です。そして、これは無効なアップキャストであるため、設計時に明示的にキャストすると、間違っていない限り、実行時に失敗します。
1 つの解決策は、 ObjectSet.Includeの拡張メソッドを作成して、 ObjectQueryではなくObjectSetを返すようにすることです。可能であれば、 ObjectQuery.Include関数のソース コードを見つける方法を知りたいです。そして、これらのソリューションが機能するかどうかはわかりません。
また、Include関数の結果をObjectQueryからObjectSetにアップキャストする方法があったかどうかも疑問です。繰り返しますが、これが機能するかどうかはわかりません。
.Net4 での Linq-to-EF の DataLoadOptions 機能の実装に関するヘルプをいただければ幸いです。
entity-framework - Entity Frameworkで「不均一な」継承に継承されたプロパティを含める方法は?
次のモデルがあります(簡略化):
「グラフィカルに」表現されているように:
CartItem のタイプが HotelCartItem の場合は、すべての CartItem をロードし、Hotel クラスのデータを含めます。
これが私がやろうとしている方法ですが、「「ホテル」という名前のナビゲーションプロパティを宣言していません」で失敗します。
タイプ Hotel のCartItems.Include("Hotel")
の Hotel プロパティを省略すると、null になります。
私の質問:
これを回避する方法はありますか?
entity-framework - カスケード熱心な読み込みの問題
データベース テーブルから作成された次のエンティティがあるとします。
人
学生
Student は、ナビゲーション プロパティとして Person を含めます。
Person には、ルックアップ テーブル Country を接続するためのナビゲーション プロパティ Country があります。
Student メタデータでは[Include]
、ナビゲーション プロパティ Person を配置します。Person メタデータでは[Include]
、ナビゲーション プロパティ Country を指定します。
生徒のデータをロードするときは、Person と Country のデータを含めるように熱心にロードしたいと考えています。
以前のバージョンの ASP.NET Data Ria Service を使用すると、これは正常に機能していました。WCF Ria Service に変更すると、上記の方法が機能しなくなりました。国は学生のナビゲーション プロパティではないというエラーが表示されます。
この問題を解決するにはどうすればよいですか?