EF4 - los Cambios no ser capturado entre sesiones
-
22-09-2019 - |
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); }
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.