Entity Framework POCO SaveChanges() sur la mise à Jour ne fonctionne pas?
Je travaille avec EF CTP 4, à l'aide de POCO modèles, l'ajout d'un nouvel objet et l'appel de SaveChanges() fonctionne, mais la mise à jour de l'objet ne fonctionne pas. Voici le code de mise à jour:
public void UpdateContact(Contact contact)
{
var findContact = GetContact(contact.ContactID);
findContact = contact;
_context.SaveChanges();
}
public Contact GetContact(int contactId)
{
return GetAllContacts().SingleOrDefault(c => c.ContactID == contactId);
}
public IQueryable<Contact> GetAllContacts()
{
return _context.Contacts;
}
Je ne suis pas sûr de ce que je fais mal ici. Une idée? Merci.
Vous devez vous connecter pour publier un commentaire.
Le problème est que lorsque vous affectez des
findContact = contact
laEntityState
ne change pas dans leObjectStateManager
(il est donc toujours à laUnchanged
). Par conséquent, aucuneUpdate
instruction SQL est généré pour l'entité. Vous disposez de plusieurs options pour faire la mise à jour:Option 1: Remplir
findContact
champ par champ:Option 2: Utiliser le
ApplyCurrentValues
méthode:Option 3: Joindre l'entité mis à jour et changement de l'état dans le
ObjectStateManager
. (Note: ce ne sera pas de faire un aller-retour à la base de données pour récupérer le contact existant).AutoMapper
est normalement utilisé pour la correspondance entre les objets de différents types, vous pouvez essayer d'utiliser le même type sur les deux côtés de la cartographie. Je n'ai pas utilisé moi-même, mais vous pouvez lui donner un aller. Et s'il vous plaît poster une mise à jour après que vous résoudre le problème, il pourrait être utile pour référence future.