使用ADO.NET实体框架时出错

时间:2010-03-04 19:35:54

标签: c# entity-framework ado.net

我想将列表转换为EntityCollection。

List<T> x = methodcall();
EntityCOllection<T> y = new EntityCollection<T>();

foreach(T t in x)
  y.Add(t);

我收到此错误。

  

无法将对象添加到   EntityCollection或EntityReference。   附加到的对象   无法将ObjectContext添加到   EntityCollection或EntityReference   与源无关   对象

有人知道这个错误吗?

2 个答案:

答案 0 :(得分:2)

听起来x是ObjectContext查询的结果。每个ObjectContext都跟踪它从数据库中读取的实体以启用更新方案。它跟踪实体以了解它们何时(或是否)被修改,以及哪些属性被修改。

术语是实体附加到ObjectContext。在您的情况下,x中的实体仍然附加到实现它们的ObjectContext,因此您无法同时将它们添加到另一个EntityCollection。

如果您首先Detach它们,您可以这样做,但如果您这样做,第一个ObjectContext将停止跟踪它们。如果您再也不想更新这些项目,这不是问题,但如果您以后需要更新它们,则必须再次Attach

答案 1 :(得分:0)

基本上所有实体对象都由作为更改跟踪器的对象上下文控制。这里的想法是实体本身对他们的环境是愚蠢的,但对象上下文知道发生了什么。

这是DataSet模型的反转,其中表跟踪它们自己的更改。

因此,对象直接添加到对象上下文及其实体集合中。在这里,您创建了一个与对象上下文无关的EntityCollection,因此不能添加其他对象。它们必须首先附加到对象上下文。

你真正想要的是返回IQueryable而不是IList。这将允许您对methodcall()的结果执行查询。