使用ADO.NETentity framework时出错

我想将列表转换为EntityCollection。

List x = methodcall(); EntityCOllection y = new EntityCollection(); foreach(T t in x) y.Add(t); 

我收到这个错误。

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

有人知道这个错误吗?

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

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

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

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

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

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

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