Pergunta

Eu estou tentando testar a desanexação de uma entidade a partir de um contexto, fazer modificações, criando um novo contexto, anexando, e tendo as alterações feitas entre as sessões de persistir.Eu não parecem ser capazes de fazer este trabalho de forma adequada.Eu tentei chamar DetectChanges bem como ApplyCurrentValues w/ sem sucesso.Abaixo está o que eu tenho até agora.Estes não são POCO e eu não quero tratá-los como tal.Eu só quero ser capaz de separar uma entidade, fazer alterações, e reatá-lo.Obrigado!

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);
}
Foi útil?

Solução

Quando você anexa um objeto para um contexto, o contexto é que vai acreditar que o objeto é inalterado, a menos que você diga o contrário.A maneira mais simples para fazer isso é para anexar o objeto ao contexto primeiro, em seguida, modificá-lo.Assim, você poderá alterar o 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);
}

Outra abordagem seria Contexto de uso.ObjectStateManager.ChangeObjectState.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top