2011-10-20 42 views
1

我有一个现有的表结构,看起来是这样的:更改为现有数据库上的共享主键?

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

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

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

AnimalType或者是“猫”和“狗”。基本上,它是一个“每种类型的表”结构加上AnimalTable中额外的“AnimalType”鉴别器。这显然是一个人为的例子,但我的项目有一个类似的设置,已经使用了很长时间。我们开始转换一些东西来使用EF Code First方法,并且我想使用这个相同的模式,所以我有一个抽象Animal类,并且具体的CatDog类。

从头开始设置它看起来非常简单,但我不确定如何更改现有表上的主键以使其如同我一直在使用EF一样。有没有人这样做,并可以提供一些提示/方向?提前致谢。

回答

0

我最后写的是,在CatTableDogTable基本上放弃了Id列的存储过程,更名为AnimalTableIdId,并提出了主键。听起来很容易,但最困难的部分是写一些东西,通常会修复所有已指向CatTable.IdDogTable.Id的外键。

0

升级脚本。

您将在未来面临与架构的其他更改相同的决定。在您的开发中,您可以重构类并让EF为您生成数据库。当您转向生产时,您还需要生成一个升级生产的脚本。

要更改主键使用:

EXEC sp_rename 'CatTable.Id', 'AnimalTableId', 'COLUMN';