Entity Framework Detached: due cose da sapere

Quando si lavora con Entity “staccate” dal context attraverso il metodo Detach, e successivamente queste Entity vengono modificate, per aggiornare le modifiche ci sono due strade:

la prima è quella di fare l’attach dell’Entity originale e poi aggiornare le modifiche con

context.Attach(oldEntity);

context.ApplyPropertyChanges(“EntitySetName”, newEntity);

la seconda, se non si ha a disposizione l’entity originale è di “richiamarla” in qualche modo e poi applicare di nuovo le modifiche sempre con con

object oldEntity = context.GetObjectByKey(newEntity.EntityKey)

context.ApplyPropertyChanges(“EntitySetName”, newEntity);

Entrambe le strade però hanno due inconvenienti:

  • il pimo, piuttosto veniale, è che eventuali campi “blob” vengono inclusi nella SQL di aggiornamento, con possibili problemi di performances
  • il secondo è che le Entity referenziate, se modificate, non vengono aggiornate.

per ovviare a questo secondo inconveniente è necessario ri-agganciare le Entity referenziate a mano, nel modo che più ritenete opportuno.

Vi ricordo che di default Entity Framework non implementa la concorrenza ottimistica: aggiorna il record senza verificare la presenza sul db dell’Entity originale. Per farlo è possibile impostare ConcurrencyMode="Fixed" nella definzione della Property nel conceptual model.

Print | posted on domenica 15 marzo 2009 20:27

Comments have been closed on this topic.