Переход на общий первичный ключ на существующей базе данных? - PullRequest
1 голос
/ 21 октября 2011

У меня есть существующая структура таблицы, которая выглядит примерно так:

AnimalTable
-------------
|Id         |
|Color      |
|Weight     |
|AnimalType |
-------------

CatTable
----------------
|Id            |
|MeowSound     |
|AnimalTableId |
----------------

DogTable
----------------
|Id            |
|BarkSound     |
|AnimalTableId |
----------------

AnimalType - это либо «Кошка», либо «Собака». По сути, это структура «Table Per Type» плюс дополнительный дискриминатор «AnimalType» в AnimalTable. Это, очевидно, надуманный пример, но мой проект имеет аналогичную настройку, которая использовалась в течение длительного времени. Мы начинаем преобразовывать некоторые вещи для использования подхода EF Code First, и я хотел бы использовать эту же схему, поэтому у меня есть абстрактный класс Animal и конкретные классы Cat и Dog. *

Настройка с нуля кажется довольно простой, но я не уверен, каков наилучший способ изменить первичные ключи в моих существующих таблицах, чтобы сделать так, как если бы я использовал EF все время. Кто-нибудь сделал это и может дать несколько советов / направление? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 октября 2011

Обновление сценариев.

В будущем вы столкнетесь с тем же решением при других изменениях схемы.В своей разработке вы можете реорганизовать классы и позволить EF создать базу данных для вас.Когда вы переходите в производство, вам также необходимо создать сценарий, который обновляет производство.

Для изменения первичных ключей используйте:

EXEC sp_rename 'CatTable.Id', 'AnimalTableId', 'COLUMN';
0 голосов
/ 22 октября 2011

В итоге я написал хранимую процедуру, которая по существу отбросила столбец Id в CatTable и DogTable, переименовал AnimalTableId в Id и сделал его первичным ключом. Звучит достаточно просто, но сложная часть заключалась в написании чего-то, что в общем исправило бы все внешние ключи, уже указанные в CatTable.Id и DogTable.Id.

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