ADO.Net EF - как определить отношение внешнего ключа в модели первого подхода? - PullRequest
10 голосов
/ 26 марта 2011

У меня были предыдущие проблемы, связанные с наследованием классов, структурированием базы данных вокруг этого и использованием структуры сущностей безуспешно. Поэтому я попытался создать сущности внутри visual studio и посмотреть, какие таблицы базы данных он создает автоматически.

У меня есть Entity MediaItem, который является Abstract и Game Наследует от этого. Игра имеет Консоль (Int), которая соответствует ConsoleID. Однако, когда я генерирую базу данных, я получаю дополнительный нежелательный столбец (ConsoleTypes_ConsoleID) внутри таблицы MediaItems_Game. Почему это так и как я могу предотвратить это? Спасибо.

enter image description here

1 Ответ

26 голосов
/ 27 марта 2011

Прежде всего, ваша модель, вероятно, неверна. ConsoleType и Game не имеют отношения один-к-одному (если у вас нет отдельной игры для каждого типа консоли). Я ожидаю, что 1 консоль может иметь несколько игр. Так должно быть один ко многим. На самом деле игра может быть выпущена на нескольких платформах, поэтому их должно быть много-много.

Вы получили ненужный столбец, потому что ваше отношение между ConsoleType и Game не знает, что в качестве внешнего ключа должно использоваться свойство Console. Это происходит, если вы используете независимую ассоциацию. Независимые ассоциации используются по умолчанию, когда вы рисуете их из одной сущности в другую в конструкторе сущностей. Вы должны использовать ассоциацию внешнего ключа.

Начните с этой установки (нарисуйте ассоциацию от ConsoleType до Game - у вас должно быть отношение один ко многим):

enter image description here

Выберите соотношение между ConsoleType и Game в свойствах, нажмите Ссылочная зависимость :

enter image description here

В Диалоговое ограничение В диалоговом окне просто установите отношение:

enter image description here

Сохраните вашу модель и снова создайте базу данных.

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