我想将列表转换为EntityCollection。
List<T> x = methodcall();
EntityCOllection<T> y = new EntityCollection<T>();
foreach(T t in x)
y.Add(t);
我收到此错误。
无法将对象添加到 EntityCollection或EntityReference。 附加到的对象 无法将ObjectContext添加到 EntityCollection或EntityReference 与源无关 对象
有人知道这个错误吗?
答案 0 :(得分:2)
听起来x
是ObjectContext查询的结果。每个ObjectContext都跟踪它从数据库中读取的实体以启用更新方案。它跟踪实体以了解它们何时(或是否)被修改,以及哪些属性被修改。
术语是实体附加到ObjectContext。在您的情况下,x
中的实体仍然附加到实现它们的ObjectContext,因此您无法同时将它们添加到另一个EntityCollection。
如果您首先Detach
它们,您可以这样做,但如果您这样做,第一个ObjectContext将停止跟踪它们。如果您再也不想更新这些项目,这不是问题,但如果您以后需要更新它们,则必须再次Attach
。
答案 1 :(得分:0)
基本上所有实体对象都由作为更改跟踪器的对象上下文控制。这里的想法是实体本身对他们的环境是愚蠢的,但对象上下文知道发生了什么。
这是DataSet模型的反转,其中表跟踪它们自己的更改。
因此,对象直接添加到对象上下文及其实体集合中。在这里,您创建了一个与对象上下文无关的EntityCollection,因此不能添加其他对象。它们必须首先附加到对象上下文。
你真正想要的是返回IQueryable而不是IList。这将允许您对methodcall()
的结果执行查询。