首页 > 解决方案 > 使用 MVVM 中的实体框架从数据库修改实体时出现 ObjectContext 错误

问题描述

我正在创建一个 WPF 应用程序。我有一个 Oracle 数据库,其中有一个名为Register并与表有关系的 Name表。我已经使用实体框架创建了模型,并且我有一个与视图模型绑定的 WPF 表单,以创建一个新名称并将其分配给一个寄存器。

现在,当我创建一个新名称时,我获取了一个寄存器,并将该名称分配给注册表,如下所示:

public class CreateRegisterViewModel : ViewModelBase
{
     private BLName blName = new BLName();
     private BLRegister blRegister = new BLRegister();
     private REGISTER register;

     public CreateRegisterViewModel() { }

     public CreateRegisterViewModel(REGISTER register)
     {
        this.register = register;
     }
     public void CreateName()
     {
        Name name = new Name();
        Name.FirstName = FirstName;
        Name.SecondName = SecondName;
        blName.CreateName(name);            
        register.NAMES.Add(name);                
        blRegister.ModifyRegister(register);
      }
    }

我调用 ModifyRegister 方法的业务逻辑类如下所示:

public class BLRegister : IDisposable
{
    private DARegister da = new DARegister();
    public void ModifyRegister(REGISTER register)
    {
            try
            {
                da.ModifyRegister(register);
            }
            catch (Exception)
            {
                throw;
            }
    }
}

在业务逻辑中,我从这样的数据访问类调用 ModifyRegister:

public class DARegister: IDARegister {
 private Entities context = new Entities();
 public void ModifyRegister(REGISTER register) {
  var entity = context.REGISTER.Where(i => i.ID_REGISTER == register.ID_REGISTER).FirstOrDefault();
  if (entity != null) {
   entity.CREATION_DATE = register.CREATION_DATE;
   entity.MODIFY_DATE = register.MODITY_DATE;
   entity.NAMES = register.NAMES;
   entity.SERIAL = register.SERIAL
   context.SaveChanges();
  }

 }
}

这是从这样的接口扩展方法:

interface IDARegister : IDisposable
    {
        void ModifyRegister(REGISTER register);
    }

现在,我的问题是当我从 ViewModel 运行 CreateName 方法时,它会抛出下一个错误:

SIGEPE.BussinesLogic.dll 中发生了“System.InvalidOperationException”类型的异常,但未在用户代码中处理 两个对象之间的关系无法定义,因为它们附加到不同的 ObjectContext 对象。

我不知道引用两个 ObjectContext 是什么意思,我是 C# 和实体框架的新手,我不知道我的错误在哪里。我该如何解决这个问题?可能是数据库的问题还是实体框架的问题?

标签: c#entity-frameworkmvvm

解决方案


推荐阅读