每个请求的上下文:如何更新实体

我有一个存储库类,如下所示。 有一种获取实体对象的方法 – GetPaymentByID。 我正在检索Payment对象并对其PaymentType属性进行更改。 但这并没有反映在数据库中。 我知道原因 – SaveContextChanges方法使用新的上下文。

我需要使用Context Per Request方法。 因此,我在每种方法中创建新的上下文。

在这种情况下,如何修改代码以成功更新数据库?

注意:客户端程序不应使用ObjectContext,因为可以使用不使用Entity Framework的另一个存储库更改存储库

注意 :“ DataContext很轻,创建起来并不昂贵

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

  1. 添加/附加和实体状态: http : //blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and -entity-states.aspx

  2. 初始化entity framework上下文的最佳方法是什么?

  3. entity framework4.1:如何使用每个呼叫生命周期数据上下文?

  4. 在EF4.1中正确地从上下文中附加和分离实体

  5. 存储库中的上下文生命周期管理和工作单元模式

  6. entity framework多个对象上下文

  7. EF4 – Context.Entry不可用于更改实体状态

您需要添加(如果数据是新的)或附加(如果数据被编辑)对象到上下文:

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

这些方面的东西:

 public void SaveContextChanges(MyEntityDataModelEDM.Payment paymentEntity) { using (var myObjectContext = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal)) { // use your own logic for determining a "new" entity myObjectContext.Entry(paymentEntity).State = (paymentEntity.PaymentID == default(int)) ? EntityState.Added : EntityState.Modified; myObjectContext.SaveChanges(); } }