Как добавить элемент, который является дочерним для нескольких отношений внешнего ключа, не касаясь родительских элементов - PullRequest
0 голосов
/ 04 января 2012

Я использую LINQ to SQL в C # на 2 элемента (для этого вопроса скажем, что они являются игрой и консолью), имея отношение «один ко многим» (один тип консоли может использоваться для игры во многих играх).

Допустим, это мой класс игры:

public class Game {
public int GameID {get; set;} ///this is the PK
public int ConsoleID {get; set;} ///this is the FK
public string Title {get; set;} ///this is the title of the game.
...
}

и это мой класс консоли:

public class Console {
public int ConsoleID {get; set;} ///this is the PK
public string ConsoleName {get; set;} ///this is the name of the console
public int GenerationNumber {get; set;} ///this is the generation of the console. e.g: The    Nintendo 64 is a 3rd generation console (after NES and SNES)
...
}

В файле DBML у меня есть связь между двумя классами: Количество элементов: OneToMany Дочерняя собственность является внутренней и называется играми (без модификаторов) Родительское свойство является публичным и является консольным. Участвующими свойствами, очевидно, являются Game.ConsoleID и Console.ConsoleID. Уникальный установлен на false.

Я хочу добавить игру в базу данных. После этого я установил все свойства на соответствующие им значения. Предполагая, что игра XBOX360, Game.Console. propertyname отобразит информацию о XBOX360.

Однако, когда я использую сервис и репозиторий для добавления игры в базу данных (SQL Server 08), я получаю исключение DuplicateKeyException на консоли. Поэтому я предполагаю, что это означает, что он пытается добавить уже существующую информацию о консоли в консольную таблицу. Очевидно, я бы не хотел, чтобы это произошло.

Вот что я пробовал до сих пор:

Попытка № 1:

Game.Console = null; //fails - set the ID to 0, and tried to remove the relationship)

Попытка № 2:

Game.Console = null;
Game.ConsoleID = 6; //fails - ForeignKeyReferenceAlreadyHasValueException is thrown

Есть идеи?

1 Ответ

1 голос
/ 04 января 2012

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

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