Ошибка при использовании ADO.NET Entity Framework - PullRequest
4 голосов
/ 04 марта 2010

Я хочу преобразовать список в коллекцию 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 ]

2 голосов
/ 04 марта 2010

Похоже, x является результатом запроса ObjectContext. Каждый ObjectContext отслеживает объекты, которые он читает из базы данных, чтобы включить сценарии обновления. Он отслеживает сущности, чтобы узнать, когда (или если) они изменены, и какие свойства изменены.

Терминология заключается в том, что сущности прикреплены к ObjectContext. В вашем случае сущности в x все еще прикреплены к ObjectContext, который их материализовал, поэтому вы не можете добавить их в другую коллекцию EntityCollection одновременно.

Вы можете сделать это, если сначала их Detach, но если вы это сделаете, первый ObjectContext перестанет их отслеживать. Если вы больше не хотите обновлять эти элементы, это не проблема, но если вам позже потребуется обновить их, вам придется Attach снова их.

0 голосов
/ 04 марта 2010

В основном все объекты сущности управляются контекстом объекта, который служит трекером изменений. Идея в том, что сами сущности тупы в своей среде, но контекст объекта знает, что происходит.

Это инверсия модели DataSet, в которой таблицы отслеживают свои собственные изменения.

Таким образом, объекты добавляются непосредственно в контекст объекта и его коллекции сущностей. Здесь вы создали коллекцию EntityCollection, которая не связана с контекстом объекта и поэтому не может иметь других объектов, добавленных к ним. Сначала они должны быть присоединены к контексту объекта.

На самом деле вы, вероятно, хотите вернуть IQueryable вместо IList. Это позволит вам выполнять запросы по результатам methodcall().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...