Contexto por solicitação: como atualizar a entidade

Eu tenho uma classe de repositório como mostrado abaixo. Existe um método para obter o objeto de entidade - GetPaymentByID. Estou recuperando um objeto Payment e fazendo uma alteração em sua propriedade PaymentType. Mas isso não se reflete no banco de dados. Eu sei o motivo - o método SaveContextChanges usa um novo contexto.

Eu preciso usarContexto por solicitação abordagem. Por isso estou criando novo contexto em cada método.

Neste cenário, como posso modificar o código para atualizar com êxito o banco de dados?

Nota: O programa cliente não deve usar o ObjectContext porque orepositório pode ser alterado com outro repositório que não usa o Entity Framework.

Nota: "Um DataContext é leve e não é caro para criar"

namespace MyRepository
{


public class MyPaymentRepository
{
    private string connectionStringVal;
    public MyPaymentRepository()
    {
        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        sqlBuilder.DataSource = ".";
        sqlBuilder.InitialCatalog = "LibraryReservationSystem";
        sqlBuilder.IntegratedSecurity = true;

        // Initialize the EntityConnectionStringBuilder.
        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
        entityBuilder.Provider = "System.Data.SqlClient";
        entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
        entityBuilder.Metadata = @"res://*/MyEDMtest.csdl|res://*/MyEDMtest.ssdl|res://*/MyEDMtest.msl";

        connectionStringVal = entityBuilder.ToString();
    }




    public MyEntityDataModelEDM.Payment GetPaymentByID(int paymentID)
    {
        MyEntityDataModelEDM.Payment payment;
        using (var myObjectContext2 = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal))
        {

            Func<MyEntityDataModelEDM.Payment, bool> predicate = (p => p.PaymentID == paymentID);
            payment = myObjectContext2.Payments.SingleOrDefault(predicate);
        }
        return payment;
    }


    public void SaveContextChanges(MyEntityDataModelEDM.Payment paymentEntity)
    {
        using (var myObjectContext = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal))
        {
            myObjectContext.SaveChanges();
        }
    }


}


}

Cliente

        MyRepository.MyPaymentRepository rep = new MyRepository.MyPaymentRepository();

        MyEntityDataModelEDM.Payment p2= rep.GetPaymentByID(1);
        p2.PaymentType = "TeSSS";
        rep.SaveContextChanges(p2);

LEITURA

Adicionar / anexar e estados da entidade:http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

Melhor maneira de inicializar um contexto de estrutura de entidade?

Entity Framework 4.1: como trabalhar com o contexto de dados de tempo de vida por chamada?

Anexando e desanexando entidades do contexto corretamente no EF4.1

Gerenciamento de duração do contexto no padrão de repositório e unidade de trabalho

Contextos de objetos múltiplos do Entity Framework

EF4 - Context.Entry não está disponível para alterar um estado de entidade

questionAnswers(1)

yourAnswerToTheQuestion