簡體   English   中英

使用LINQ Context更新記錄?

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

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