Linq to SQL Внешние ключи и коллекции - PullRequest
0 голосов
/ 23 декабря 2010

Я все еще пытаюсь обернуться вокруг связей LINQ to SQL и внешнего ключа.

У меня есть таблица с именем "Parent", а другая - с именем "Children".У меня есть отношения OneToMany, где у родителя может быть несколько детей.Мой DBML выглядит примерно так:

<Table Name="" Member="Parents">
<Type Name="Parent">
  <Column Member="ParentID" Type="System.String" IsPrimaryKey="true" CanBeNull="false" />
  <Column Member="ChildID" Type="System.String" CanBeNull="false" />
  <Association Name="Parent_Child" Member="Childs" ThisKey="ParentID" OtherKey="ParentID" Type="Child" />
</Type>
</Table>
<Table Name="" Member="Childs">
<Type Name="Child">
  <Column Member="ChildID" Type="System.String" IsPrimaryKey="true" CanBeNull="false" />
  <Column Member="ParentID" Type="System.String" CanBeNull="false" />
  <Association Name="Parent_Child" Member="Parent" ThisKey="ParentID" OtherKey="ParentID" Type="Parent" IsForeignKey="true" />
</Type>
</Table>

В моем коде я хотел бы сделать что-то вроде:

// parent has already been loaded from the datacontext
parent.Childs = <some collection of children>
db.SubmitChanges();

Но когда я это делаю, я получаю следующую ошибку:

Член, определяющий идентичность объекта, не может быть изменен.Попробуйте добавить новый объект с новым идентификатором и удалить вместо него существующий.

Может кто-нибудь сказать мне, как правильно выполнить это?

1 Ответ

2 голосов
/ 23 декабря 2010

это на самом деле ошибка datacontext, я думаю, у вас есть несколько экземпляров datacontext .. ну, вы не можете добавить любую сущность в datacontext ведьма уже извлекается через другой экземпляр datacontext ... даже если вы можете это сделать, установив для datacontext.objecttrackingenabled значение false, а затем вы можете добавить его в другой контекст данных, тогда он точно будет работать ...

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