在我的自定义开发的应用程序中,出现错误“ IEntityChangeTracker的多个实例无法引用实体对象”。据我了解,这意味着我不能使用附加到多个上下文的相同实体。为了重现错误,我使用以下代码创建了一个沙箱应用程序:
function delRow(obj,tablId) {
if ($(tablId+" tbody tr").length>1){
$(obj).parent().parent().remove();
setRowNumber(tablId);
}
}
问题是我实际上在此沙箱应用程序中未收到任何错误。因此,现在我需要了解,实体框架是否真正禁止将单个实体附加到多个上下文以及如何克服此限制。我想到的解决方案是在将实体副本附加到另一个上下文时创建它。但是现在我认为,确实可以将实体附加到另一个上下文而无需创建副本。
答案 0 :(得分:2)
仅EF proxies不能附加到多个上下文,因为它们引用了创建它们的上下文。
声明...
var item = new Item() ...
...创建一个简单的POCO,它对上下文一无所知,即使将其附加到上下文也是如此。
如果您将其替换为...
var item = context.Items.Create();
... item
将是一个代理对象,您会注意到尝试将其附加到另一个上下文将引发“无法被多个实例引用”异常。
此外,当上下文从数据库中读取对象时,它将成为代理对象(前提是满足实体类成为代理的所有条件)。