2012-07-20 138 views
1

我有使用實體框架的代碼,如下所示。我正在得到以下消息。這是什麼原因?如何克服這一點?實體框架:ObjectStateEntry錯誤

的ObjectStateManager不包含具有到類型「MyEntityDataModelEDM.Payment」的一個對象的引用的ObjectStateEntry。

注:我寫了基於回覆此代碼Context Per Request: How to update Entity

enter image description here

CODE

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 myDatabaseContext = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal)) 
     { 

      Func<MyEntityDataModelEDM.Payment, bool> predicate = (p => p.PaymentID == paymentID); 
      payment = myDatabaseContext.Payments.SingleOrDefault(predicate); 
     } 
     return payment; 
    } 


    public void UpdateDBWithContextChanges(MyEntityDataModelEDM.Payment paymentEntity) 
    { 
     using (var myDatabaseContext = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal)) 
     { 
      myDatabaseContext.ObjectStateManager.ChangeObjectState(paymentEntity, System.Data.EntityState.Modified); 
      myDatabaseContext.SaveChanges(); 
     } 
    } 


} 

CLIENT

static void Main(string[] args) 
    { 

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


     MyEntityDataModelEDM.Payment p2 = rep.GetPaymentByID(1); 
     p2.PaymentType = "CHANGE"; 
     rep.UpdateDBWithContextChanges(p2); 


    } 

參考:

  1. The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object

回答