实体框架:ObjectStateEntry错误实体、框架、错误、ObjectStateEntry

2023-09-04 04:11:07 作者:心囚

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


    }
 
AAAI 2018 论文收录结果公布,Gowild 狗尾草两篇论文同时入选

参考文献:

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.