2011-05-27 56 views
5

我對數據庫非常不滿,所以請耐心等待。如何用新信息更新數據庫

我有一個程序獲取一些用戶信息並將其添加到數據庫表。然後,我需要爲該表獲取更多信息,並對其進行更新。要做到這一點我也試着這樣做:

public static void updateInfo(string ID, string email, bool pub) 
    { 
     try 
     { 
      //Get new data context 
      MyDataDataContext db = GetNewDataContext(); //Creates a new data context 

      //Table used to get user information 
      User user = db.Users.SingleOrDefault(x => x.UserId == long.Parse(ID)); 

      //Checks to see if we have a match 
      if (user != null) 
      { 
       //Add values 
       user.Email = email; 
       user.Publish = publish; 
      } 

      //Prep to submit changes 
      db.Users.InsertOnSubmit(user); 
      //Submit changes 
      db.SubmitChanges(); 
     } 
     catch (Exception ex) 
     { 
      //Log error 
      Log(ex.ToString()); 
     } 
    } 

但我得到這個錯誤:

System.InvalidOperationException:無法添加已經存在的實體。

我知道這是因爲我已經在表中有一個條目,但我不知道如何編輯更新的代碼,而不是嘗試創建一個新的?

爲什麼這不起作用?不會提交對當前項目更新的項目更新,而不會創建新項目?

回答

7

問題是

//Prep to submit changes 
db.Users.InsertOnSubmit(user); 

因爲您得到了來自DB用戶已經,你不需要它與上下文重新關聯。

評論,你很好去。

只是一個樣式/用法評論。你應該處理你的上下文:

public static void updateInfo(string ID, string email, bool pub) 
{ 
    try 
    { 
     using (MyDataDataContext db = GetNewDataContext()) 
     { 
      User user = db.Users.SingleOrDefault(x => x.UserId == long.Parse(ID)); 

      if (user != null) 
      { 
       user.Email = email; 
       user.Publish = publish; 
      } 

      db.SubmitChanges(); 
     } 
    } 
    catch (Exception ex) 
    { 
     //Log error 
     Log(ex.ToString()); 

     // TODO: Consider adding throw or telling the user of the error. 
     // throw; 

    } 
} 
+0

是的,它做到了。感謝您的幫助 – 2011-05-27 16:31:50

+0

合併在我以前的第二個迴應中使用... – 2011-05-27 16:43:58