EF代码首先在创建对象时迭代所有属性

时间:2012-09-26 15:51:17

标签: c# performance entity-framework ef-code-first

我在我的应用程序中使用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();

在我添加了一些进行计算但没有set访问器(如FormulaA)的字段后,我意识到执行上述行时性能下降。

经过一些调试后,我发现EF迭代了所有属性。它会在创建对象时调用属性的所有get函数,即使我不访问它们。

此行为的目的是什么,是否有解决方法。这可能与跟踪变化有关吗? 我的公式在对象本身中非常方便,但是现在它严重影响了性能。

1 个答案:

答案 0 :(得分:2)

您可以尝试添加

[NotMapped]
public int FormulaA ....

并且在查询中也只选择您真正需要的属性。

select new {e.PropA, e.PropB}