[英]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.