簡體   English   中英

LINQ to Entities 如何更新記錄

[英]LINQ to Entities how to update a record

好的,所以我是 EF 和 LINQ 的新手。 我已經想出了如何插入和刪除,但由於某種原因,更新似乎逃脫了我的掌握。

這是我的代碼示例:

EntityDB dataBase = new EntityDB();
Customer c = new Customer
{
     Name = "Test",
     Gender = "Male
};
dataBase.Customers.AddObject(c);
dataBase.SaveChanges();

以上創建並添加了一條記錄就好了。

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

以上有效地刪除了指定的記錄。

現在我該如何更新? 我似乎無法在實體集合中找到“ UpdateObject() ”方法。

只需修改返回的實體之一:

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

請注意,您只能更新實體(擴展 EntityObject 的東西,而不是您使用select new CustomObject{Name = x.Name}類的東西投影的東西

//用於更新

(from x in dataBase.Customers
         where x.Name == "Test"
         select x).ToList().ForEach(xx => xx.Name="New Name");

//用於刪除

dataBase.Customers.RemoveAll(x=>x.Name=="Name");

它們都跟蹤您對集合的更改,只需調用應該更新數據庫的 SaveChanges() 方法。

在大多數情況下,@tster 的回答就足夠了。 但是,我有一個場景,我想更新一行而不先檢索它。

我的情況是這樣的:我有一個表,我想在其中“鎖定”一行,以便一次只有一個用戶能夠在我的應用程序中對其進行編輯。 我通過說來實現這一目標

update items set status = 'in use', lastuser = @lastuser, lastupdate = @updatetime where ID = @rowtolock and @status = 'free'

原因是,如果我只是按 ID 檢索行,更改屬性然后保存,我最終可能會出現兩個人同時訪問同一行。 這樣,我只需發送和更新聲明這一行是我的,然后我嘗試檢索具有我剛剛更新的相同屬性的行。 如果該行存在,那就太好了。 如果由於某種原因它沒有(其他人的“鎖定”命令首先到達那里),我只需從我的方法中返回 FALSE。

我通過使用接受字符串命令和參數數組的context.Database.ExecuteSqlCommand來做到這一點。

只是想添加此答案以指出在某些情況下檢索行、更新行並將其保存回數據庫是不夠的,並且在必要時有一些方法可以運行直接更新語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM