[英]Updating a record using LINQ Context?
我試圖用單個值更新來更新用戶表,但我無法弄清楚我做錯了什么。 這就是我所擁有的:
public static void ApplyROB(string ROBread, string userName)
{
using (SERTEntities ctx = CommonSERT.GetSERTContext())
{
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// Audit of the transfer
datUser trUser = new datUserRole();
trUser.ROB = ROBread;
trUser.AccountName = userName;
// Persist update to DB
ctx.SaveChanges();
}
}
我離開了嗎? 當我點擊更新時沒有任何反應。 怎么說,用戶名=用戶名? 我做得對嗎?
基本上需要一個簡單的:
update datUser set ROB = "Y" where AccountName= "myusername"
在使用Context的LINQ中,它變得更復雜一些
請幫忙。
您沒有將新實體添加到上下文中,因此在保存時,上下文不會發現任何更改。 你需要......
ctx.datUserRoles.Add(datUserRole)
要進行更新,您需要從上下文中檢索實體,對其進行更改,然后保存...所以:
var entity=ctx.datUserRoles.SingleOrDefault(dur=>dur.AccountName==someUserName);
if(entity!=null)
{
entity.someProp=someVal;
ctx.SaveChanges();
}
else
{
throw new UnexpectedOperationException(); //or however you want to fail
}
如果您需要更新。 也許是這樣的:
public static void ApplyROB(string ROBread, string userName)
{
using (SERTEntities ctx = CommonSERT.GetSERTContext())
{
var trUser= ctx.datUserRole.Where(a=>a.AccountName==userName)
.FirstOrDefault();
if(trUser!=null)
{
trUser.ROB = ROBread;
ctx.SaveChanges();
}
}
}
如果您確定要始終有更新的內容,可以使用First()
。 然后您不需要檢查trUser
是否為null
在某種意義上,消費者是正確的,在另一種意義上是錯誤的:您想要更新現有記錄。
為此,您需要先選擇記錄,例如:
var user =
(from u in ctx.datUserRoles
where u.AccountName == "accountname"
select u).FirstOrDefault();
如果accountname
是相同類型的有效內容 - 無關緊要,因為您可以根據需要選擇它,您可以觸摸它以符合您的標准。 然后,一旦你有項目做的東西:
if (user != null) {
user.ROB = ROBread;
ctx.SaveChanges();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.