2011-10-20 41 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';