我使用 MYSql 服务器作为 Windows 窗体应用程序背后的数据库。我的数据库中有两个模式,我必须将条目放入其中。我创建了两个上下文对象,每个对象对应一个模式。当我使用 schema1 上的 contextA 时,所有条目都完美完成,但是当我使用 contextB 时,我收到此异常。
和MySql驱动有关系吗?
此错误表明您正在尝试将一个实体附加到您的上下文,但它已经附加到另一个实体。
我怀疑这可能不是直接引用,但上下文中的导航属性之一可能包含附加到其他上下文的实体。在我看来(根据您的描述)单独的上下文只有在它们是断开的对象结构时才应该真正使用,例如它们在上下文之间没有 FK。
另一件要避免的事情是确保对于每个工作单元,您只使用每个上下文的一个实例。如果您尝试使用另一个上下文实例中的实体,也会发生此错误。
EDIT:
如果您想在当前上下文之外维护范围,那么通常使用 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;
}
然而,这是一项相当大的工作,因此使用 ID 通常是一个更好的主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)