Я использую 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
Есть идеи?