【问题标题】:Changing to Shared Primary Key on Existing DB?在现有数据库上更改为共享主键?
【发布时间】:2011-10-20 22:14:05
【问题描述】:

我有一个看起来像这样的现有表结构:

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

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

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

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

从头开始设置似乎很简单,但我不确定更改现有表上的主键以使其就像我一直在使用 EF 一样的最佳方法。有没有人这样做并且可以提供一些提示/方向?提前致谢。

【问题讨论】:

    标签: c# .net entity-framework migration ef-code-first


    【解决方案1】:

    我最终编写了一个存储过程,它基本上删除了CatTableDogTable 中的Id 列,将AnimalTableId 重命名为Id,并将其作为主键。听起来很容易,但困难的部分是编写一些东西,通常可以修复所有已经指向CatTable.IdDogTable.Id 的外键。

    【讨论】:

      【解决方案2】:

      升级脚本。

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

      要更改主键,请使用:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多