2

非常に単純なシナリオがあります。

コードファースト、EF5、デフォルトのモデル規則

私の親クラスにはChildrenのコレクションがあり、これらはすべて抽象的なChildクラスから派生しています。私がConcreteChild1とConcreteChild2を持っているとしましょう。

ConcreteChild1のみを取得しようとするparent.Children.OfType<ConcreteChild1>()と、約束どおり、結果を使用してConcreteChild1のリストになります。残念ながら、発行されたSQLを調べると、すべての子が実際にDBから取得されたことがわかります。これは、SQLが「whereDiscriminator in('ConcreteChild1')」ではなく、「where Discriminator in('ConcreteChild1')」を発行するためです。

タイプに一致する行のみを取得するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

ナビゲーションプロパティは、クエリをサポートしていませんIQueryable(もちろん、オブジェクトへのLINQをサポートしていますが、すべてがサポートしています)。

明示的なクエリを作成して実行します。

過去にそのようなナビゲーションプロパティ(順序付け、フィルタリングなど)を使用したことがある場合、これらすべてがサーバー上で実行されることはありませんでした。その制限のため、ナビゲーションプロパティを使用してサブコレクションにアクセスするケースは非常にまれだと思います。それはほとんど意味がありません。

于 2012-12-27T18:09:53.667 に答える