Question

Le framework Entity offre une grande flexibilité pour mettre à jour des données dans le même contexte de données

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()

Si je dois déplacer cette fonction de mise à jour vers la couche service, celle-ci ne contient que "Personne". dans la demande, quel serait le meilleur moyen d'affecter ma "personne"? demande un objet dans le contexte de données sans refaire la copie en profondeur?

Était-ce utile?

La solution

Vous devez associer votre objet entité à un contexte de données.

Vous devez également étendre votre classe partielle de contexte de données avec la méthode AttachUpdeted. Comme lorsque vous attachez un objet à un contexte de données, il ne sait pas que des mises à jour ont été effectuées. Le code ci-dessous indique au contexte de données que chaque propriété a été mise à jour et doit être écrite dans la base de données.

public static void Save(EntityObject entity)
{
   using(MyContext ctx = new MyContext)
   {
     ctx.AttachUpdated(entity);
     ctx.SaveChanges();
   }  
} 

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
   if (objectDetached.EntityState == EntityState.Detached)
   {
      object original = null;
      if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
         obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
      else
       throw new ObjectNotFoundException();
    }
} 

article 1
article 2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top