2012-10-01 52 views
2

我在我的桌子下面列實體框架的部分負荷

  • ID(INT)
  • 名稱(nvarchar的)通常< 100個字符
  • 數據(nvarchar的)平均1MB

我正在編寫一個程序,它將遍歷每行並對「名稱」字段執行一些操作。由於我只使用名稱字段和數據字段非常大,是否可以指示EF只加載ID和名稱字段?

回答

4

當然是

ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name}); 

此方法是選擇到一個匿名類。

,如果你想再次保存該回你可以用我稱之爲一個虛擬實體的東西做到這一點:

foreach(var thing in ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name})) 
{ 
    var dummy = new YourEntity{Id = thing.Id}; 
    ctx.YourDbSet.Attach(dummy); 
    dummy.Name = thing.Name + "_"; 
} 
ctx.SaveChanges(); 

此方法適用於快照跟蹤爲EF只跟蹤後所做的更改附加調用發送回到更新聲明中。這意味着您的查詢將只包含該實體名稱屬性的更新(即,它不會觸摸數據)

注意:您希望確保您在嚴格控制的上下文中執行此操作,因爲您不能附加一個對象已經附加到EF跟蹤圖上。在上述情況下,選擇將重視實體圖形作爲其匿名(所以你是使用相同的情況下是安全的)

+0

唯一的問題是,我需要將更改保存到p.Name – James

+0

我可以採用某種直接運行更新查詢? – James

+0

@james看到編輯 –