Entity Framework Erreur: Un objet avec une valeur null EntityKey valeur ne peut pas être attachée à un objet de contexte
Dans mon application j'ai le code suivant...
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
});
}
Ce code appelle une méthode sur un objet dataManager qui utilise 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;
}
}
L'insérer sur ce code fonctionne très bien. Mais lorsque je tente d'effectuer une mise à jour, je reçois un message d'erreur indiquant: "Un objet avec une valeur null EntityKey valeur ne peut pas être attachée à un objet de contexte."
Il se produit sur cette ligne de code: les entités.Attach(userInfo);
Ce que je suis en train d'accomplir est d'éviter de faire un aller-retour à la base de données simplement de sélectionner l'enregistrement que je vais apporter des modifications et mise à jour, ce qui fait deux allers-retours à la base de données.
Toutes les idées ce qui va mal, ou comment je pourrais mieux l'accomplir?
Grâce.
OriginalL'auteur jdavis | 2011-12-13
Vous devez vous connecter pour publier un commentaire.
Semble que vous êtes en utilisant 4.1 EF+Vous avez à dire EF que vous voulez que votre entité à être mis à jour (Modification d'état):
P. S. Vous n'avez pas à appeler explicitement
Attach
. C'est fait sous le capot.Mise à jour:
en fonction de vos commentaires, vous êtes à l'aide de EF 4.0. Voici ce que vous avez à faire pour joindre votre objet, telle que modifiée en EF 4.0:
Vous ne pouvez pas utiliser
Attach
méthode. De http://msdn.microsoft.com/en-us/library/bb896271.aspx:Leerreur est parce que votre entité est "Ajouté" de l'état. Mais vous avez une entité semblable dans la base de données avec la même clé primaire. vous devez modifier manuellement l'état. Testé et fonctionne sur ok.
Je ne semblent pas avoir accès à l'Entrée() la méthode sur mon entités de l'objet. Pouvez-vous me donner un peu plus de conseils?
Quelle est la version de EF utilisez-vous? 4.1+ ou 4.0?
Eh bien, je ne suis pas sûr de savoir exactement comment vérifier, mais je suis à l'aide .net 4.0.
OriginalL'auteur Kamyar
De MSDN
Espère que cela va vous aider.
Essayez cette article.
Avez-vous essayé le suivant:
dc.AttachToOrGet(userInfo.EntityKey.EntitySetName, ref userInfo);
? Cela fonctionne très bien pour moi (oùdc
est le contexte de données). En particulier, si le même objet existe déjà quelque part d'autre, il vous devient la référence d'origine pointant vers la même instance.Il n'y a pas de AttachToOrGet. C'est une extension que vous avez fait?
OriginalL'auteur Shymep