我有一个现有的表结构,如下所示:
AnimalTable
-------------
|Id |
|Color |
|Weight |
|AnimalType |
-------------
CatTable
----------------
|Id |
|MeowSound |
|AnimalTableId |
----------------
DogTable
----------------
|Id |
|BarkSound |
|AnimalTableId |
----------------
AnimalType
是“猫”或“狗”。基本上,它是一个“Table Per Type”结构加上AnimalTable中的附加“AnimalType”鉴别器。这显然是一个人为的例子,但我的项目有类似的设置,已经使用了很长时间。我们开始将一些东西转换为使用EF Code First方法,并且我想使用相同的模式,因此我有一个抽象的Animal
类,具体的Cat
和{{1类。
从头开始设置这看起来非常简单,但我不确定更改现有表上的主键的最佳方法是使它好像我一直使用EF一样。有没有人这样做,可以提供一些提示/方向?提前谢谢。
答案 0 :(得分:0)
我最终编写了一个存储过程,该过程基本上删除了Id
和CatTable
中的DogTable
列,并将AnimalTableId
重命名为Id
,并将其设为主键。听起来很容易,但困难的部分是编写一些通常会修复已指向CatTable.Id
和DogTable.Id
的所有外键的内容。
答案 1 :(得分:0)
升级脚本。
将来,您将面临与架构的其他更改相同的决定。在开发中,您可以重构类,让EF为您生成数据库。当您转向生产时,您还需要生成一个升级生产的脚本。
要更改主键,请使用:
EXEC sp_rename 'CatTable.Id', 'AnimalTableId', 'COLUMN';