错误使用ADO.NET实体框架
我想一个列表转换为EntityCollection。错误使用ADO.NET实体框架
List<T> x = methodcall();
EntityCOllection<T> y = new EntityCollection<T>();
foreach(T t in x)
y.Add(t);
我得到这个错误。
该对象无法添加到 EntityCollection或EntityReference中。 一个附加到一个 ObjectContext的对象不能被添加到 EntityCollection或的EntityReference 不与源 对象相关联。
任何人都知道这个错误?
这听起来像x
是ObjectContext的查询结果。每个ObjectContext跟踪它从数据库中读取的实体以启用更新方案。它跟踪实体以知道何时(或如果)它们被修改,哪些属性被修改。
术语是,实体附加到ObjectContext。在你的情况下,x
中的实体仍然附加到实现它们的ObjectContext,所以你不能同时将它们添加到另一个EntityCollection。
您可以这样做,如果你第一次Detach
他们,但如果你这样做,第一ObjectContext的停止追踪他们。如果您不想再次更新这些项目,这不是问题,但如果您以后需要更新它们,则必须再次使用Attach
这些项目。
对不起您的建议是什么?我完全不明白 – alice7 2010-03-04 19:47:14
您可以在此处查看有关附加和分离对象图的更多信息:http://msdn.microsoft.com/en-us/library/bb896271.aspx – 2010-03-04 19:49:32
基本上所有实体对象由用作变更跟踪对象上下文控制。这里的想法是,实体本身对他们的环境愚蠢,但对象上下文知道发生了什么。
这是DataSet模型的反转,其中表格跟踪自己的更改。
所以对象添加到直接对象上下文和它的实体集合。在这里,您创建了一个与对象上下文无关的EntityCollection,因此不能添加其他对象。它们必须首先附加到对象上下文中。
真的,你可能想要的是返回IQueryable而不是IList。这将允许您对methodcall()
的结果执行查询。
我解决了它。 我的DId是 y.attach(x); 我不知道为什么添加没有工作,但为我附加工作。 – alice7 2010-03-04 20:51:44