W mojej aplikacji mam następujący kod ...Entity Framework Błąd: Obiekt z wartością null EntityKey nie może być dołączony do kontekstu obiektu
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
});
}
Ten kod wywołuje metodę na obiekcie, który wykorzystuje 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;
}
}
Wkładka tego kodu działa dobrze. Ale kiedy próbuję wykonać aktualizację, otrzymuję komunikat o błędzie: "Obiekt o zerowej wartości EntityKey nie może być dołączony do kontekstu obiektu."
Występuje w tym wierszu kodu: entities.Attach (userInfo);
Staram się uniknąć robienia wycieczek do bazy danych tylko po to, aby wybrać rekord, który później wprowadzę i zaktualizuję, co spowoduje dwie rundy wycieczek do bazy danych.
Jakieś pomysły, co jest nie tak, lub jak mógłbym lepiej to osiągnąć?
Dzięki.
To była pierwsza rzecz, o której pomyślałem, ale błąd byłby inny. Dobrze? – Shymep
Theerror jest, ponieważ twój podmiot jest w stanie "Dodano". Ale masz podobną jednostkę w bazie danych z tym samym kluczem podstawowym. musisz ręcznie zmienić stan. Testowane i działa poprawnie. – Kamyar
Nie wydaje się, że mam dostęp do metody Entry() na moim obiekcie entity. Czy możesz dać mi trochę więcej wskazówek? – jdavis