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