Kontext pro Anforderung: So aktualisieren Sie Entity

Ich habe eine Repository-Klasse wie unten gezeigt. Es gibt eine Methode zum Abrufen des Entitätsobjekts - GetPaymentByID. Ich rufe ein Payment-Objekt ab und ändere dessen PaymentType-Eigenschaft. Dies spiegelt sich jedoch nicht in der Datenbank wider. Ich kenne den Grund - die SaveContextChanges-Methode verwendet einen neuen Kontext.

Ich muss verwendenKontext pro Anforderung Ansatz. Daher erstelle ich in jeder Methode einen neuen Kontext.

Wie kann ich in diesem Szenario den Code ändern, um die Datenbank erfolgreich zu aktualisieren?

Hinweis: Das Client-Programm sollte den ObjectContext nicht verwenden, da derDas Repository kann durch ein anderes Repository geändert werden, das kein Entity Framework verwendet.

Hinweis: "Ein DataContext ist leicht und kostengünstig zu erstellen"

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

LESEN

Hinzufügen / Anhängen und Entitätsstatus:http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

Bester Weg, um einen Entity-Framework-Kontext zu initialisieren?

Entity Framework 4.1: Wie wird mit dem Kontext der Lebenszeitdaten pro Anruf gearbeitet?

Ordnungsgemäßes Anhängen und Entfernen von Entitäten aus dem Kontext in EF4.1

Verwaltung der Kontextlebensdauer in Repository und Arbeitseinheit

Entity Framework Mehrere Objektkontexte

EF4 - Context.Entry ist nicht verfügbar, um einen Entitätsstatus zu ändern

Antworten auf die Frage(1)

Ihre Antwort auf die Frage