[英]Entity Update Issue | C# Entity Framework
我在這里遇到了麻煩。
我from
這里的自定義function
加載用戶:
public User GetUserById(int Id)
{
var User = DBContext.Users.SingleOrDefault(x=>x.Id == Id);
return User;
}
問題出在我稱之為controller
地方!
var User = GetUserById(Id);
User.Language = UserModel.Language;
//UpdateModel(User); //I tried this but not working.
DBContext.SaveChanges();
數據庫未更新。
我嘗試使用linq直接將用戶加載到控制器中,一切正常。
但是,為什么它不起作用呢?
是否有任何變通辦法可以使其與此功能一起使用?
沒有像DBContext.Users.Update(User)
這樣的功能。 我記得使用過類似的工具,但無法回憶!
正如EBrown所說,它們必須是DbContext的相同實例。 我敢打賭,您的服務使用一種上下文,而控制器使用另一種上下文。 因此,現在到達控制器時,它已斷開連接並且無法被EF跟蹤。
解決方案是將其重新連接到控制器使用的上下文(還有其他方法可以實現此目的)。
var User = GetUserById(Id); // returns a disconnected user
User.Language = UserModel.Language;
// Attach back to context and tell EF it is updated
DBContext.Users.Attach(User);
DBContext.Entity(User).State=EntityState.Modified;
DBContext.SaveChanges();
如果這是您的回發代碼,則可以編寫一個UserUpdate
函數:
public void UpdateUser(UserModel userViewModel)
{
var userEntity = DBContext.Users.Find(userViewModel.Id); // Get your user from database
Mapper.Map(userViewModel, userEntity); // Use Automapper to move the changed fields into your entity
DbContext.SaveChanges();
}
然后,您的控制器POST就是:
if (ModelState.IsValid)
{
UpdateUser(UserModel);
// redirect to list or where ever...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.