Domanda

Entity framework offre una grande flessibilità per aggiornare i dati nello stesso datacontext

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

Se devo spostare questa funzione di aggiornamento sul livello di servizio che richiede solo "Persona" nella richiesta, quale sarebbe il modo migliore per assegnare la mia "persona" richiesta oggetto nel datacontext senza ripetere la copia profonda?

È stato utile?

Soluzione

È necessario collegare l'oggetto entità a un contesto di dati.

È inoltre necessario estendere la classe parziale del contesto dati con il metodo AttachUpdeted. Come quando si collega un oggetto a un contesto di dati, non si sa che sono stati effettuati aggiornamenti. Il codice seguente indicherà il contesto dei dati ogni proprietà è stata aggiornata e deve essere scritta nel database.

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();
    }
} 

articolo 1
articolo 2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top