1

DatabaseFirstアプローチでEntityFrameworkとSQLServer2008を使用しています。

私の問題は:

多くの列(〜100)を保持するテーブルがいくつかあり、多くの行を取得しようとすると、そのテーブルから3つまたは4つの列だけを使用する必要がある場合でも、結果が返されるまでにかなりの時間がかかります。 。

私はこの問題を解決する方法を見つけようとしてStackoverflowで半日を過ごしました、そして私は2つの解決策を思いつきました:

  • ストアドプロシージャを使用して、必要な列のデータを取得します。
  • .edmx(xml)ファイルと.csファイルを編集して、使用しない列を削除します。

私の問題は再びです:

  • ストアドプロシージャを使用して必要な列のデータを取得すると、Entity Frameworkのメリットが失われ、代わりにADO.NETを使用して、ストアドプロシージャを直接呼び出すことができます...

  • データベースに変更を加えるたびに、.edmxファイルを再生成する必要があり、以前に行った変更が失われるため、2番目の解決策をとることはできません:'(

Entity Frameworkでこれを行う方法はありますか?それは可能ですか!

NHibernateDapperのような他のORMが存在することは知っていますが、多くの苦痛を引き起こすことなくこの機能を提供できるかどうかはわかりません。

4

3 に答える 3

5

毎回すべての列を返す必要はありません。必要な列を指定できます。

var query  = from t in db.Table
             select new { t.Column1, t.Column2, t.Column3 };
于 2013-03-08T15:43:21.370 に答える
1

通常、データを別の poco に投影すると、EF / L2S などでこれが自動的に行われます。

var slim = from row in db.Customers 
           select new CustomerViewModel {
             Name = row.Name, Id = row.Id };

2列しか読み取らないと思います。

dapper のようなツールの場合: SQL を制御するため、必要な列のみを指定してください - 使用しないでください*

于 2013-03-08T15:45:39.127 に答える
-1

コードファーストのDbContext、POCO、および必要な列のサブセットを返すマップを使用して、2番目のプロジェクトを作成できます。

これはカットアンドペーストコードの場合ですが、必要なものが得られます。

クラスを作成してデータをそれらに投影することもできますが、このメソッドを使用して更新できるかどうかはわかりません。単一のメソッド内で匿名型を使用できますが、メソッド間で受け渡すには実際のクラスが必要です。

もう1つのオプションは、コードファースト開発に移行することです。

于 2013-03-08T15:42:01.170 に答える