2012-09-26 110 views
0

我使用EF代碼第一次在我的應用程序,並有下面的類:EF代碼第一次迭代創建對象

[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遍歷所有的屬性。它在創建對象時調用屬性的所有獲取函數,即使我不訪問它們。

這種行爲的目的是什麼,是否有解決方法。這可能與跟蹤變化有關嗎? 對我來說,在對象本身中使用我的公式非常方便,但現在它嚴重影響了性能。

回答

2

你可以嘗試添加

[NotMapped] 
public int FormulaA .... 

而且還查詢只選擇性能你真正需要的。

select new {e.PropA, e.PropB} 
+0

NotMapped屬性是一個好主意。但我也有一些屬性是公式,也應該存儲在數據庫中;這對NotMapped不起作用。 – Preli

+0

有趣的案例。那麼第二個變體和只有加載數據才能初始化你的類型呢? – AlexT

+0

我不確定我是否理解「僅使用加載的數據初始化您的類型」?你的意思是「選擇新的{e.PropA,e.PropB}」嗎? – Preli