2008-10-01 12 views
9

Entity Framework proporciona una gran flexibilidad para actualizar los datos de la misma DataContextCómo actualizar objeto sin datos contextos de

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

Si tengo que mover esta función de actualización a la capa de servicio que sólo toma "Persona" en la solicitud , ¿cuál sería la mejor manera de asignar mi objeto de solicitud "Persona" al contexto de datos sin volver a realizar la copia profunda?

Respuesta

12

Tiene que adjuntar el objeto entidad a un contexto de datos.

También necesita extender su clase parcial de contexto de datos con el método AttachUpdeted. Como cuando adjuntas un objeto a un contexto de datos, no sabe que se han realizado actualizaciones. El siguiente código le dirá al contexto de datos que cada propiedad se ha actualizado y debe escribirse en la base de datos.

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

Cuestiones relacionadas