代码之家  ›  专栏  ›  技术社区  ›  alice7

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

  •  4
  • alice7  · 技术社区  · 14 年前

    我要将列表转换为EntityCollection。

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

    我得到这个错误。

    无法将对象添加到 EntityCollection或EntityReference。 附加到 无法将ObjectContext添加到 实体集合或实体引用 不与源关联的 对象。

    有人知道这个错误吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Mark Seemann    14 年前

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

    术语是实体是 附属的 对象上下文。在您的案例中,实体 X 仍然附加到实现它们的ObjectContext,因此不能同时将它们添加到另一个EntityCollection。

    如果你先来的话,你也许能做到 Detach 但是如果这样做,第一个ObjectContext将停止跟踪它们。如果您再也不想更新这些项目,这不是问题,但是如果您以后需要更新它们,您必须 Attach 他们又来了。

        2
  •  0
  •   Orion Adrian    14 年前

    基本上,所有实体对象都由用作更改跟踪程序的对象上下文控制。这里的想法是,实体本身对环境是哑的,但是对象上下文知道发生了什么。

    这是数据集模型的一个反转,其中表跟踪它们自己的更改。

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

    实际上,你可能想要的是返回iQueryable而不是iList。这将允许您对 methodcall() .