我在我的应用程序中使用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函数,即使我不访问它们。
此行为的目的是什么,是否有解决方法。这可能与跟踪变化有关吗? 我的公式在对象本身中非常方便,但是现在它严重影响了性能。
答案 0 :(得分:2)
您可以尝试添加
[NotMapped]
public int FormulaA ....
并且在查询中也只选择您真正需要的属性。
select new {e.PropA, e.PropB}