Ошибка Entity Framework: объект с нулевым значением EntityKey не может быть присоединен к контексту объекта
В моем приложении у меня есть следующий код ...
public Boolean SaveUserInformation(UserInfoDTO UserInformation)
{
return dataManager.SaveUserInfo(new UserInfo()
{
UserInfoID = UserInformation.UserInfoID.HasValue ? UserInformation.UserInfoID.Value : 0,
UserID = UserInformation.UserID,
ProxyUsername = UserInformation.ProxyUsername,
Email = UserInformation.Email,
Status = UserInformation.Status
});
}
Этот код вызывает метод для объекта dataManager, который использует Entity Framework ...
public Boolean SaveUserInfo(UserInfo userInfo)
{
try
{
//Validate data prior to database update
if (userInfo.UserID == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with UserID property set to NULL."); }
if (userInfo.ProxyUsername == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with ProxyUsername property set to NULL."); }
if (userInfo.Email == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with Email property set to NULL."); }
if (userInfo.UserInfoID == 0)
{
//Perform Insert
using (PriorityOneEntities entities = new PriorityOneEntities())
{
entities.UserInfoes.AddObject(userInfo);
entities.SaveChanges();
}
}
else
{
//Perform Update
using (PriorityOneEntities entities = new PriorityOneEntities())
{
entities.Attach(userInfo);
entities.SaveChanges();
}
}
return true;
}
catch (Exception ex)
{
//TODO: Log Error
return false;
}
}
Вставка в этот код работает просто отлично. Но когда я пытаюсь выполнить обновление, я получаю сообщение об ошибке: «Объект с нулевым значением EntityKey не может быть присоединен к контексту объекта».
Это происходит в этой строке кода: entity.Attach (userInfo);
То, что я пытаюсь сделать, - это избежать кругового обхода базы данных, просто чтобы выбрать запись, в которую я позже внесу изменения и обновлю ее, таким образом сделав два обхода базы данных.
Любые идеи, что идет не так, или как я мог бы лучше добиться этого?
Благодарю.