1

さて、ここに問題があります。データベースには、100列のvwComponantAという大量の情報を含むビューがあります

[Column()] 属性を使用するすべてのマッピングを含む ComponantA という .net アプリ内にエンティティがあります。これはうまく機能しますが、DB で select * を実行してオブジェクトを設定するため、遅くなります。これも機能します.

上記のパフォーマンスの問題を回避するために、DynamicLinq を導入しました。これにより、戻す列の量を減らすことができますが、タイプ セーフを使用して、通常の Linq を使用してクエリを実行できます。これは素晴らしいことです。次に、私が持ち帰ったカットダウンフィールドに対処するために、個別の POCO コンポーネントがあり、それぞれに独自の [Column] 属性のセットがあり、マッピングクラスを使用して実行時にマップされます。

問題は、大規模なデータセットを扱う場合、これらの間のマッピングが非常に遅くなる可能性があることです。10000 レコードが 10000 回マップされるなどです。EF が行うことは、コンポーネント間でマッピングする DynamicProxyClass を作成することです。

私の質問は、どうすればマッピングを回避し、EF にマッピングを任せることができるでしょうか? (動的linqのためにIQueryableNOTを扱っています)IQueryable<T>

クエリを動的に保ちながら [Column] 属性を活用する方法が必要です。

これはすべてコード ファーストであり、エンティティ フレームワーク 5 です。

助けてくれてありがとう。ニック

4

1 に答える 1

0

正直なところ、私はあなたの質問を理解していませんが、あなたがやろうとしていることは動的linqを必要としません. 投影が必要なだけです:

var data = from c in context.vwComponentA
           select new POCOWithIdAndName {
               Id = c.Id,
               Name = c.Name
           };

投影はデータベースで実行されるため、 と のみが返されIdますName

于 2012-10-02T12:03:56.200 に答える