【问题标题】:ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of typeObjectStateManager 不包含引用类型对象的 ObjectStateEntry
【发布时间】:2011-06-21 08:28:51
【问题描述】:

我正在使用 EISK(员工信息入门工具包)开发应用程序。我的实体图看起来像这样 我尝试通过这段代码更新应用程序表。

           int apId = Convert.ToInt32(Request.QueryString["ApplicationID"]);

            ApplicationBLL objGetApplication = new ApplicationBLL();

            Appdec.YEP.BusinessEntities.Application objApplication =
            objGetApplication.GetApplicationByApplicationID(apId);



            objApplication.Status = (ddlStatus.SelectedValue == "0" ? false : true);



            new ApplicationBLL(new Appdec.YEP.DataAccessLayer.DatabaseContext()).UpdateApplication(objApplication);

现在业务逻辑的更新方法是

 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, true)]
    public void UpdateApplication(Application updatedApplication)
    {
        // Validate Parameters
        if (updatedApplication == null)
            throw (new ArgumentNullException("updatedApplication"));

        // Validate Primary key value
        if (updatedApplication.ApplicationID.IsInvalidKey())
            BusinessLayerHelper.ThrowErrorForInvalidDataKey("ApplicationID");

        // Apply business rules
        OnApplicationSaving(updatedApplication);
        OnApplicationUpdating(updatedApplication);

        //attaching and making ready for parsistance
        if (updatedApplication.EntityState == EntityState.Detached)
            _DatabaseContext.Applications.Attach(updatedApplication);



_DatabaseContext.ObjectStateManager.ChangeObjectState(updatedApplication, System.Data.EntityState.Modified);//this line throws the error 
//ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type
        int numberOfAffectedRows = _DatabaseContext.SaveChanges();
        if (numberOfAffectedRows == 0) 
            throw new DataNotUpdatedException("No application updated!");

        //Apply business workflow
        OnApplicationUpdated(updatedApplication);
        OnApplicationSaved(updatedApplication);

    }

谁能告诉我如何修复这个错误并更新表格。 当我尝试更新其他表时也会发生相同的错误。插入工作正常。 希望不会打扰到你。最好的问候。

【问题讨论】:

  • 删除 if (updatedApplication.EntityState == EntityState.Detached) 并始终附加
  • 它让我遇到了这个错误一个实体对象不能被多个 IEntityChangeTracker 实例引用。
  • 好像没有人来帮我:(
  • 所以它已经属于一个上下文,你应该更新那个 caontext,你能用 _DatabaseContext.Applications.AddObject(updatedApplication);而是

标签: c# asp.net entity-framework entity eisk


【解决方案1】:

所以它已经属于一个上下文,你应该更新那个上下文。 它不能附加到新的上下文中, 您可以创建一个 updatedApplication 的新实例,并将 updatedApplication 的所有属性复制到这个新实例,并将新实体附加到应用程序。

也要改

  if (newApp .EntityState == EntityState.Detached)
            _DatabaseContext.Applications.Attach(newApp );

var newApp = Application ();
 //Copy all propery of updatedApplication to  newApp here 

            if (newApp .EntityKey == null || newApp .EntityKey.IsTemporary)
            {
                _DatabaseContext.Applications.AddObject(newApp );
            }
            else
            {
                _DatabaseContext.Applications.Attach(newApp );
            }
_DatabaseContext.ObjectStateManager.ChangeObjectState(newApp , System.Data.EntityState.Modified);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
相关资源
最近更新 更多