Pregunta

Estoy tratando de prueba de desconexión de una entidad de un contexto, hacer modificaciones, la creación de un nuevo contexto, la adjunta, y habiendo los cambios realizados entre las sesiones de persistir.No me parecen para ser capaz de obtener esta trabajando apropiadamente.He intentado llamar a DetectChanges así como ApplyCurrentValues w/ sin éxito.A continuación es lo que he conseguido hasta ahora.Estos no son de POCO y no quiero que tratarlos como tales.Yo sólo quiero ser capaz de separar una entidad, de hacer cambios, y volver a adjuntar.Gracias!

OCConsumer consumer;

using (var ctx1 = new CMSStagingContext())
{
    consumer = (from c in ctx1.OCConsumers
            select c).FirstOrDefault();

    Console.WriteLine("Retrieved {0} - {1} {2}",
        consumer.CustomerId, consumer.FirstName, consumer.LastName);

    ctx1.Detach(consumer);
}

consumer.BirthDate = "10/22/1981";

using (var ctx2 = new CMSStagingContext())
{
    ctx2.Attach(consumer);
    ctx2.ApplyCurrentValues("OCConsumers", consumer);
    ctx2.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave | System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
}
¿Fue útil?

Solución

Al adjuntar un objeto a un contexto, contexto en el que se va a suponer que el objeto no se ha modificado, a menos que se indique lo contrario.La forma más sencilla de hacer esto es colocar el objeto en el contexto de la primera, luego de modificarlo.Así que usted puede cambiar su código para:

OCConsumer consumer;

using (var ctx1 = new CMSStagingContext())
{
    consumer = (from c in ctx1.OCConsumers
            select c).FirstOrDefault();

    Console.WriteLine("Retrieved {0} - {1} {2}",
        consumer.CustomerId, consumer.FirstName, consumer.LastName);

    ctx1.Detach(consumer);
}

using (var ctx2 = new CMSStagingContext())
{
    ctx2.Attach(consumer);
    consumer.BirthDate = "10/22/1981";
    ctx2.SaveChanges(System.Data.Objects.SaveOptions.DetectChangesBeforeSave | System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);
}

Otro enfoque sería Contexto de uso.ObjectStateManager.ChangeObjectState.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top