2011-04-30 33 views

Respuesta

7

No existe tal funcionalidad integrada; debe construir la suya propia. Muy común es, por ejemplo, el enfoque como:

public void SaveOrUpdate(MyEntity entity) 
{ 
    if (entity.Id == 0) 
    { 
     context.MyEntities.AddObject(entity); 
    } 
    else 
    { 
     context.MyEntities.Attach(entity); 
     context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
    } 

    // You can call SaveChanges here or you can call it separately after multiple changes 
} 

Ésta es ejemplo de cómo trabajar con la entidad independiente que tienen Id generadas automáticamente en la base de datos (IDENTITY). El ID predeterminado para la nueva entidad siempre es 0 porque el valor real se asignará durante los cambios de guardado.

+0

gracias, sin embargo, al usar DDD y usted está adjuntando una raíz Agregado, con algunos niveles de anidación de propiedades, entonces uno tendría que hacer alguna forma o recursión. ¿Hay algún ejemplo de eso? (También es un poco desconcertante que el equipo de EF espere que los desarrolladores manejen este escenario común por sí mismos, cuando otros orms como NHibernate ofrecen la fusión de la caja) –

+4

Pero, ¿y si no sabes si el objeto existe en la base de datos? La sentencia 'MERGE' es precisamente para determinar si el objeto existe o no, y actualizar o insertar * según sea necesario *. –

+1

Te pierdes la parte eliminar. – Azimuth