2012-10-05 50 views
3

我想更新一個1000萬記錄數據庫中的很多記錄。這裏的例子表明,更新可以這樣完成:Linq to Entities如何更新一個數據庫訪問中的記錄

Customer c = (from x in dataBase.Customers 
      where x.Name == "Test" 
      selext x).First(); 
c.Name = "New Name"; 
dataBase.SaveChanges(); 

但這看起來像兩次到數據庫。一個獲取記錄,另一個保存記錄。如果我在一次調用中更新了一千條記錄,我認爲這將需要從數據庫中取出1,000條記錄到我的WCF服務器,進行更改,然後將1000條記錄通過局域網返回到數據庫服務器。

在過去,「更新客戶設置名稱='測試',其中年份< 1960」將作爲LAN上的一條指令,並且工作在數據庫服務器上完成。

Linq to Entities中是否有這樣的東西?

*順便說一句:這是我試圖實現的一個簡單示例,我實際上有數百個命令來發布,並且我不希望2 *數百次的數據庫訪問,也沒有看到需要將數據庫中的所有數據轉移到WCF,只是爲了更改它並將其發回!*

回答

3

正如您懷疑的那樣。如果您有1000條記錄,那麼您確實會看到1001個針對此操作的數據庫請求。 ORM非常適合將對象推入內存,使用它們並更新它們。它們不適合批量操作。在這種情況下,最好的方法是使用ADO.Net並通過代碼傳遞更新聲明,或者將批量更新命令放入存儲過程並映射到EF中的函數。