我要更新記錄,但計劃抓住這個錯誤錯誤當更新紀錄的EntityFramework
具有相同鍵的對象已經存在於ObjectStateManager。該ObjectStateManager無法跟蹤多個對象使用相同的密鑰。」
這是我的代碼
public bool Update(User item, HttpPostedFileBase avatar)
{
var tran = ContextEntities.Database.BeginTransaction(IsolationLevel.ReadUncommitted);
try
{
var user = new UserDa().Get(ContextEntities, item.Id);//get current user
CheckConstraint(item, Enums.Status.Update);
//avatar checker
if (avatar != null)
{
if (avatar.ContentType != "image/jpeg")
throw new Exception("[Only Jpg Is Allowed");
if (user.AvatarId == null)
{
item.AvatarId = new FileDa().Insert(ContextEntities, avatar);
}
else if (user.AvatarId != null)
{
item.AvatarId = new FileDa().Update(ContextEntities, (Guid)user.AvatarId, avatar);
}
}
//password checker
item.Password = string.IsNullOrWhiteSpace(item.Password) ? user.Password : Utility.Hash.Md5(item.Password);
ContextEntities.Entry(item).State = EntityState.Modified;
if (!new UserDa().Update(ContextEntities, item))
throw new Exception();
tran.Commit();
return true;
}
catch (Exception ex)
{
tran.Rollback();
throw new Exception(ex.Message);
}
}
,這是我更新方法UserDa
類public bool Update(PortalEntities contextEntities, User item)
{
var res = contextEntities.SaveChanges() > 0;
return res;
}
爲什麼顯示的錯誤,並我怎樣才能修復它?
可能是因爲實例'item'已經被追蹤,現在您檢索或行中添加重複的實例'VAR用戶=新UserDa()獲取(ContextEntities,item.Id); //獲取當前user'。只是猜測,因爲你不提供這種方法的代碼。 – Igor