Comment mettre à jour un objet sans contexte de données
-
03-07-2019 - |
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?
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();
}
}