20

エンティティフレームワークに3つのクラスがある場合。

class Base {}

class Left : Base {}

class Right : Base {}

そして私は電話しますDBContext.Bases.ToList();

これにより、完全に型指定されたすべてのインスタンスがBase関連する継承型に返されます。一部の人が気付いたように、大規模な継承構造でのEFのパフォーマンスは控えめに言っても素晴らしいものではありません。プロジェクトでの実際のクエリは600行の長さで、1つのエンティティを返すだけで、生成に2秒かかります。

構造全体で結合する必要がないため、返すタイプを指定すると、クエリの実行速度が大幅に向上します。例えば

DBContext.Bases.OfType<Left>.ToList();
or
DBContext.Bases.OfType<Right>.ToList();

ただし、基本クラスのみを返したいと思います。不幸なこと

DBContext.Bases.OfType<Base>.ToList(); 

DBContext.Bases.ToList();と同じことを行います。

それは全体の継承構造を取得します... Baseコレクションを調べたときにクラスBaseのみを返す方法はありますか(EFで新しいタイプを作成せずに)?


申し訳ありませんが、実際のアカウントにログインできません...

明確にしなかったかもしれませんが、すべてのオブジェクト(Base、Left、Rightを含む)を戻したいのですが、データベース内で実際のLeftクラスとRightクラスであっても、Baseクラスのみを返したいと思います。

OFTYPEは良い提案でしたが、実際のBaseタイプはないため、すべてのエンティティが除外されます。しかし、Base型オブジェクトのBase型の値のみを返したいのです。

何か案は?

4

6 に答える 6

1

LINQ を使用できると仮定すると、次の簡単で汚い例の行に沿って何かを使用できますか?:

var result = from item in DBContext.Bases.ToList()
            where (!item.GetType().IsSubclassOf(typeof(Base)))
           select item;
于 2010-01-13T13:00:10.667 に答える