當我使用AutoMapper錯誤,這個錯誤發生:「相同類型的實體已經有相同的主鍵值」使用AutoMapper
附加型「MyProject.DAL.User」的實體失敗,因爲另一個相同類型的實體已具有相同的主鍵值。如果圖中的任何實體具有衝突的鍵值,則使用「附加」方法或將實體的狀態設置爲「未更改」或「已修改」時可能會發生這種情況。這可能是因爲一些實體是新的並且還沒有收到數據庫生成的關鍵值。在這種情況下,使用'Add'方法或'Added'實體狀態來跟蹤圖形,然後根據情況將非新實體的狀態設置爲'Unchanged'或'Modified'。
我想將User從UserModel映射到數據庫中。我在用戶界面中更改UserModel屬性,然後再次將其映射到用戶並更新它。 我的代碼是在這裏:
public UserModel GetUserByUserId(int id)
{
var user = db.Users.Where(p => p.UserId == id).FirstOrDefault();
var userModel = Mapper.Map<UserModel>(user);
return userModel;
}
public void Update(UserModel userModel)
{
var user = Mapper.Map<User>(userModel);
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
}
,但如果我不使用自動映射器和寫類似下面的代碼,它正常工作。
public void Update(UserModel userModel)
{
updatingUser.Email = userModel.Email;
updatingUser.FirstName = userModel.FirstName;
updatingUser.ModifiedDate = DateTime.Now;
updatingUser.LastName = userModel.LastName;
updatingUser.Password = userModel.Password;
updatingUser.UserName = userModel.UserName;
db.Entry(updatingUser).State = EntityState.Modified;
db.SaveChanges();
}
我應該怎麼做:
'updatesUser'似乎在你的第二個更新函數中無處可來 –
請看看我對ASP.NET MVC的回答 - 附加一個'MODELNAME'類型的實體失敗,因爲另一個同類型的實體已經有相同的主鍵值](http://stackoverflow.com/questions/23201907/asp-net-mvc-attaching-an-entity-of-type-modelname-failed-because-another-ent/39557606#39557606)。 –