アプリケーションで EF Code First を使用しており、次のクラスがあります。
[Table("TBL_XYZ")]
public class XYZ
{
[Required]
public string PropA { get; set; }
[Required]
public int PropB { get; set; }
public int FormulaA
{
get
{
return PropB * Math.PI / 100;
}
}
}
これは、データベースからデータを取得する方法です。
var data = (from e in db.XYZ where e.PropB < 100 select e).ToList();
計算を行い、設定されたアクセサー (FormulaA など) を持たないフィールドをいくつか追加した後、上記の行を実行するとパフォーマンスが低下することに気付きました。
いくつかのデバッグの後、EF がすべてのプロパティを反復処理することがわかりました。オブジェクトにアクセスしなくても、オブジェクトの作成中にプロパティのすべての get 関数を呼び出します。
この動作の目的は何ですか。回避策はありますか。これは、変更を追跡することと関係があるのでしょうか? オブジェクト自体に数式があると非常に便利ですが、現時点ではパフォーマンスに深刻な影響を与えています。