簡體   English   中英

實體更新問題| C#實體框架

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

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