2

私はこのSQL文を持っています

select st.Column1, isnull(sot.SomeColumn, 0) as SomeColumn 
from SomeTable st 
left join SomeOtherTable sot 

<DefiningQuery>Entity Framework (4.0) .edmx ファイル内のタグ内で、重大なパフォーマンスの問題が発生しています。書かれているとおりに SQL を実行するのは高速ですが、EF は実行時に SQL をラップしてパラメーターを挿入するため、非常に遅くなります。

isnull を取り除くことができます。ラップされた EF SQL では、ネイティブと同じくらい高速ですSomeColumnが、価値があることを確認するには isnull が必要です。

ここで使用できる、EF とうまく連携する isnull の代替手段はありますか?

ご協力いただきありがとうございます。

4

2 に答える 2

1

EF デザイナーのプロパティのプロパティには、既定値のプロパティがあるはずですが、それがニーズに合うかどうかはわかりません。別の方法として、EF モデルから生成されたエンティティはすべてパーシャルです。デフォルト値を提供するために、SomeColumn プロパティ (isnull なし) をラップする別のプロパティを追加します。SomeColumn が null 許容の int としてマップされる可能性が高いことを考えると、次のように新しいプロパティを定義できます。

public SomeColumnWithDefaultValue {
    get { return this.SomeColumn ?? 0; }
    set { this.SomeColumn = value; }
}

SomeColumn に対してクエリを記述し、それが null でないことを確認する必要がある場所で SomeColumnWithDefaultValue を使用します。

于 2011-04-13T16:05:08.193 に答える
0

isnull私の解決策は、SQL から の使用を完全に削除し、代わりにSELECT NEWID() AS ID(SQL 2000 以降と互換性を持たせるために必要な) をこれらすべてのクエリに含めることでした。これIDを single として<EntityKey>設定すると、左側の結合プロパティを として設定できるようにisnullable=trueなり、EF のスローダウンに対処する必要がなくなりました。

これが誰かに役立つことを願っています。

于 2011-05-02T15:45:44.413 に答える