Контекст на запрос: как обновить сущность

У меня есть класс репозитория, как показано ниже. Существует метод для получения объекта сущности & # x2013; GetPaymentByID. Я получаю объект Payment и изменяю его свойство PaymentType. Но это не отражено в базе данных. Я знаю причину & # x2013; метод SaveContextChanges использует новый контекст.

Мне нужно использоватьContext Per Request подход. Поэтому я создаю новый контекст в каждом методе.

В этом случае, как я могу изменить код для успешного обновления базы данных?

Примечание: клиентская программа не должна использовать ObjectContext, потому чтоrepository can be changed with another repository that does not use Entity Framework.

Note: & quot;A DataContext is lightweight and is not expensive to create& Quot;

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


}


}

клиент

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

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

READING

Add/Attach and Entity States: http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

Best way to initialize an entity framework context?

Entity Framework 4.1: how to work with per call life time data context?

Attaching and detaching entities from context correctly in EF4.1

Context lifetime management in repository and unit of work pattern

Entity Framework Multiple Object Contexts

EF4 - Context.Entry isn't available to change an Entity State

Ответы на вопрос(1)

Ваш ответ на вопрос