Kontekst na zapytanie: jak zaktualizować jednostkę

Mam klasę repozytorium, jak pokazano poniżej. Istnieje metoda pobierania obiektu encji - GetPaymentByID. Odzyskuję obiekt Payment i zmieniam jego właściwość PaymentType. Ale to nie znajduje odzwierciedlenia w bazie danych. Znam powód - metoda SaveContextChanges używa nowego kontekstu.

Muszę użyćKontekst na zapytanie podejście. Dlatego tworzę nowy kontekst w każdej metodzie.

W tym scenariuszu, jak mogę zmodyfikować kod, aby pomyślnie zaktualizować bazę danych?

Uwaga: Program kliencki nie powinien używać ObjectContext, ponieważrepozytorium można zmienić za pomocą innego repozytorium, które nie korzysta z Entity Framework.

Uwaga: ”DataContext jest lekki i nie jest drogi w tworzeniu"

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


}


}

Klient

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

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

CZYTANIE

Dodaj / Dołącz i Stany podmiotu:http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

Najlepszy sposób na zainicjowanie kontekstu ram encji?

Entity Framework 4.1: jak pracować z kontekstem danych czasu życia na połączenie?

Dołączanie i odłączanie elementów z kontekstu poprawnie w EF4.1

Zarządzanie czasem życia w repozytorium i wzorzec jednostki pracy

Struktura encji Konteksty wielu obiektów

EF4 - Context.Entry nie jest dostępne do zmiany stanu jednostki