2013-12-23 19 views
0

是否有任何方法從強類型對象更新對象而不列出每個字段?
讓我們考慮以下情況:來自同一類型的另一個對象的更新實體框架對象

using (var context = new MyDBEntities()) 
{ 
    var user = (User)Session["EditedUser"]; 
    var oldUser = context.Users.FirstOrDefault(o => o.Id == user.Id); 
    oldUser.FirstName= user.FirstName; 
    oldUser.LastName = user.LastName; 
    etc .... 
    context.SaveChanges(); 
} 

我有29多個領域,我不願意一個由每次一個把它們寫下來。 我所尋找的應該是類似這樣

using (var context = new MyDBEntities()) 
{ 
    var user = (User)Session["EditedUser"]; 
    var oldUser = context.Users.FirstOrDefault(o => o.Id == user.Id); 
    oldUser=user; 
    context.SaveChanges(); 
} 

肯定這將失敗,因爲實體的主鍵衝突的。我想在這裏實現的是更新除主鍵值以外的所有字段。

+1

你試圖附加了嗎?例如'db.Users.Attach(用戶); db.Entry(user).State = EntityState.Modified;' – Silvermind

+0

用戶已經在數據庫中,我正嘗試從另一個用戶對象更新他的屬性。 Attach不會引用舊用戶,它將作爲新用戶附加。 –

+1

'AddObject'將是一個新用戶,如果您將'[Key]'列設置爲現有用戶的相同值,則不是'Attach'。 – Silvermind

回答

3

使用的附加功能,感謝爲「Silvermind」 現在我的代碼看起來像這樣

using (var context = new MyDBEntities()) 
{ 
    try 
    { 
     var user = (User)Session["EditedUser"]; 
     context.Users.Attach(user); 
     context.ObjectStateManager.ChangeObjectState(user, EntityState.Modified); 
     context.SaveChanges(); 
     Session["EditedUser"] = null; 
     return "ok"; 
    } 
    catch (Exception ex) 
    { 
     return ex.Message; 
    } 
} 
+0

它工作嗎? – Silvermind

+0

是的。它工作正常:D –

+0

你可以接受你自己的答案。 – Silvermind

相關問題