我有c。使用实体框架如下图所示$ C $。我正在以下excpetion。这究竟是什么原因呢?如何克服呢?
在ObjectStateManager不包含与参考类型MyEntityDataModelEDM.Payment'的对象的ObjectStateEntry。
请注意:我写这篇code基于在语境回复每个请求:如何更新实体
code
公共类MyPaymentRepository
{
私人字符串connectionStringVal;
公共MyPaymentRepository()
{
SqlConnectionStringBuilder sqlBuilder =新SqlConnectionStringBuilder();
sqlBuilder.DataSource =。;
sqlBuilder.InitialCatalog =LibraryReservationSystem;
sqlBuilder.IntegratedSecurity = TRUE;
//初始化EntityConnectionStringBuilder。
EntityConnectionStringBuilder entityBuilder =新EntityConnectionStringBuilder();
entityBuilder.Provider =System.Data.SqlClient的;
entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
entityBuilder.Metadata = @RES://*/MyEDMtest.csdl |高分辨率://*/MyEDMtest.ssdl |高分辨率://*/MyEDMtest.msl;
connectionStringVal = entityBuilder.ToString();
}
公共MyEntityDataModelEDM.Payment GetPaymentByID(INT paymentID)
{
MyEntityDataModelEDM.Payment付款;
使用(VAR myDatabaseContext =新MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal))
{
FUNC< MyEntityDataModelEDM.Payment,布尔> predicate =(P => p.PaymentID == paymentID);
支付= myDatabaseContext.Payments.SingleOrDefault(predicate);
}
返回付款;
}
公共无效UpdateDBWithContextChanges(MyEntityDataModelEDM.Payment paymentEntity)
{
使用(VAR myDatabaseContext =新MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal))
{
myDatabaseContext.ObjectStateManager.ChangeObjectState(paymentEntity,System.Data.EntityState.Modified);
myDatabaseContext.SaveChanges();
}
}
}
客户端
静态无效的主要(字串[] args)
{
MyRepository.MyPaymentRepository代表=新MyRepository.MyPaymentRepository();
MyEntityDataModelEDM.Payment P2 = rep.GetPaymentByID(1);
p2.PaymentType =更改;
rep.UpdateDBWithContextChanges(P2);
}
参考文献:
The ObjectStateManager不包含ObjectStateEntry与参考对象 解决方案您没有附加到上下文第一。 看到答案的引用问题。
I have code using entity framework as shown below. I am getting the following excpetion. What is the reason for this? How to overcome this?
The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'MyEntityDataModelEDM.Payment'.
Note: I wrote this code based on the reply in Context Per Request: How to update Entity
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);
}
REFERENCE:
The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object解决方案
You did not attach it to the context first. See the answer to the referenced question.
上一篇:在Android和IPhone(不同的结果),使用AES-128加密不同、结果、IPhone、Android
下一篇:Android的:如何利用亚行壳分开始与strace一个应用程序应用程序、Android、亚行壳分、strace