0

アプリケーションで 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 関数を呼び出します。

この動作の目的は何ですか。回避策はありますか。これは、変更を追跡することと関係があるのでしょうか? オブジェクト自体に数式があると非常に便利ですが、現時点ではパフォーマンスに深刻な影響を与えています。

4

1 に答える 1

2

追加してみることができます

[NotMapped]
public int FormulaA ....

また、クエリでは、本当に必要なプロパティのみを選択します。

select new {e.PropA, e.PropB}
于 2012-09-27T08:32:38.123 に答える