質問
私はLINQクエリマップされたエンティティに枠組みをするとどうなるのかわかりません
image = this.Context.ImageSet
.Where(n => n.ImageId == imageId)
.Where(n => n.Albums.IsPublic == true)
.Single();
返り値は単一のイメージオブジェクトと作品とされているものです。
しかし、このクエリを返すべてのプロパティの画像のテーブルのDBです。通常、これはこれらの画像を含む多くのバイナリデータと非常に長い時間を返します。
基本的には、itの現状私はlinqクエリは:
Select ImageId, Name, Data
From Images
...
が必要なクエリはこのinstread:
Select ImageId, Name
From Images
...
知りたい荷重を除くすべてのデータです。(取得できますこのデータは次の非同期通)
解決
残念ながらを使用する場合は、LINQ to SQLありませんの最適化を行った。
て3つのオプション:
- お帰りの体のコンテキストを追跡すべて、この場合、画像の全ての分野
- す分野を返します匿名タイプ
- す分野を返し強く型付けされたカスタムクラスで本体を万が一紛失してしまっ追跡、あと考えている。
I loveの商品が、私の方です。
私の唯一のソリューションできるの再構築データベースは、すべてのデータを個別のテーブルへのリンクからの画像を表に示す。
このように復帰時の画像のうまみを返し、新しいDataIDフィールドにすることも可能ですが、新たにとり重いデータが、要望の受け入れが大変良いと思います。
乾杯
他のヒント
このセットだけで、これらのフィールドを使用して新しいイメージを作成します。あなたが選択した画像のデータを取得するために戻ったとき、私は先に行くと、完全なデータセットを取得する代わりに、既存のID /名前データとそれをマージしようとしていることをお勧めしたいです。 ID /名前フィールドは、データへのおそらく比べて小さいとコードがマージをやろうとしているよりもはるかに簡単になります。実際には同様にあなたの目的に合わせかもしれない匿名型を使用して、Imageオブジェクトを構築することも、それは必要ないかもしれません。
image = this.Context.ImageSet
.Where(n => n.ImageId == imageId)
.Where(n => n.Albums.IsPublic == true)
.Select( n => new Image { ImageId = n.ImageId, Name = n.Name }
.Single();
は、個々のテーブル列が遅延ロードさせるためのオプションがあります。あなたの大きなバイナリフィールドのためにこれをtrueに設定してください。それが実際に使用されるまで、そのデータがロードされていません。
[あなたのすべてのための質問:エンティティフレームワークはMSVS 2010年に延期ロードされたvarbinary型/ varchar型のをサポートしている場合、誰もが知っていますか?
(エンティティ・フレームワークまたはLINQ 2 SQLの)溶液#2:
のみ主キーとvarchar(MAX)/ VARBINARY(MAX)を含むテーブルのビューを作成します。 EFにその地図ます。
あなたのEntity Frameworkのデザイナーの中で、テーブル定義(残して、それはビューでのみ定義された)からvarbinary型(最大)/ varchar型(最大)プロパティを削除します。あなたはロガーとのことを確認可能性があるが、これは、そのテーブルに読み取り/書き込み操作からフィールドを除外する必要があります。
一般的に使用すると、データブロブを除外テーブルを介してデータにアクセスします。あなたがブロブを必要とするときは、ビューから行をロードします。ビューに書き込むことができるようになります場合、私はわからないんだけど、私はあなたが書き込みを行うだろうかわかりません。あなたがビューに書き込むことができたり、ストアドプロシージャを記述する必要があるかもしれません、またはあなたは1つのテーブルのDBMLファイルをバストすることができます。
できない LINQ 少なくとも今のところ...
最適なアプローチさんが作成 View
のテーブルが必要な分野で利用 LINQ その View
.
別の方法としては、クエリ式で選択新しいを使用することができます...
var image =
(
from i in db.ImageSet
where i.ImageId == imageId && i.Albums.IsPublic
select new
{
ImageId = i.ImageId,
Name = i.Name
}
).Single()
LINQクエリ式は、実際にコンパイル時ラムダ式に変換しますが、私はそれをより読みやすく、理解しやすい見つけるので、私は、一般的にクエリ式を使用してprefairます。
感謝の:)の