"IEntityChangeTracker的多个实例无法引用实体对象."

Hin*_*ina 4 c# entity-framework

我使用MYSql服务器作为我的Windows窗体应用程序后面的数据库.我的数据库中有两个模式,我必须将条目放入.我为每个模式创建了两个上下文对象.当我使用schema1上的contextA时,所有条目都完美地完成,但是当我使用contextB时,我得到了这个异常.它与MySql驱动程序有关吗?

Not*_*ple 9

此错误表示您正在尝试将实体附加到您的上下文,但它已经附加到另一个实体.

我怀疑这可能不是直接引用,但是您的上下文中的某个导航属性可能包含附加到其他上下文的实体.在我看来(根据你所描述的)单独的上下文应该只在它们是断开连接的对象结构时才被使用,例如它们在上下文之间没有FK.

要避免的另一件事是确保每个工作单元只使用每个上下文的一个实例.如果您尝试使用其他上下文实例中的实体,也会发生此错误.

编辑:

如果要将范围保持在当前上下文之外,则ID通常是更好的主意.您可以将实体重新附加到EF,以便您可以按照描述的方式添加它们,但必须确保处理原始上下文或分离实体,然后使用以下内容手动将其附加到新上下文:

    public DbEntityEntry<T> EnsureAttachedEF(T entity)
    {
        var e = m_Context.Entry(entity);
        if (e.State == EntityState.Detached)
        {
            m_Context.Set<T>().Attach(entity);
            e = m_Context.Entry(entity);
        }

        return e;
    }
Run Code Online (Sandbox Code Playgroud)

然而,这是相当多的工作,因此使用ID通常是一个更好的主意.