Question

Je suis en train de tester, de détacher une entité à partir d'un contexte, d'y faire des modifications, la création d'un nouveau contexte, de la fixer, et d'avoir les modifications apportées entre les sessions persistent.Je ne semble pas être en mesure d'obtenir ce travail de manière appropriée.J'ai essayé d'appeler DetectChanges ainsi que ApplyCurrentValues w/ pas de succès.Ci-dessous est ce que j'ai obtenu jusqu'à présent.Ce ne sont pas POCO et je ne veux pas les traiter comme tels.Je veux juste être en mesure de se détacher d'une entité, y apporter des modifications, et de les rattacher.Merci!

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);
}
Était-ce utile?

La solution

Lorsque vous attachez un objet à un contexte, le contexte va présumer que l'objet n'est pas modifié, sauf si vous dites le contraire.La façon la plus simple de le faire est de fixer l'objet au contexte, d'abord, puis de le modifier.Si vous pouviez changer votre code:

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);
}

Une autre approche serait d' Contexte d'utilisation.Vousmanager.ChangeObjectState.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top