在团队环境中重构数据库对象

通过 Visual Studio 高级专业版,可以将数据库架构的脱机表示形式(称为“数据库项目”)置于版本控制系统之下,以对更改进行管理。 您或您团队的成员可更改数据库项目,但是随后必须生成这些更改并将其部署到实际数据库中。 在此情况下,最多可存在数据库的四种表示形式:

  • 数据库服务器,其中包含实际数据库和数据。

  • 数据库项目,它是数据库架构的脱机表示形式。

  • 已编译的 .dbschema 文件,它包含将该数据库架构部署到任何目标数据库和服务器所需的信息。 只要生成数据库项目,就会创建该文件。

  • 版本控制储存库,它跟踪任何团队成员对数据库项目所做的所有更改。

有关更多信息,请参见开始团队数据库开发

在团队环境中重构

如果使用重构来重命名数据库对象或将其移动到另一个架构,则引用该重命名或移动对象的其他对象将自动以新的名称或架构进行更新。 例如,您可以重命名表中的列,引用该列的任何存储过程都将自动用新名称进行更新。 有关更多信息,请参见重命名对数据库对象的所有引用将数据库对象移至另一个架构

必须从源代码管理中签出必须更新的所有对象的文件,然后才能更新数据库对象。 如果已经将源代码管理选项设置为自动签出文件,则签出尝试将以静默方式进行。 否则,系统将提示您签出文件。

下列情况下重构操作将失败:

  • 如果有人锁定了一个或多个文件,则会出现一条消息,并且重构操作将取消。 再次尝试操作之前,必须等待,直到文件解锁。

  • 如果签出的版本比项目中的版本新,则会出现一条消息,然后重构操作将取消。 在重试操作之前,应当协调文件版本。

  • 如果系统提示需要签出文件,而您单击了**“取消”**,则重构操作将取消。

    提示

    重命名数据库对象时,不要重命名在其中定义该对象的 .sql 文件。 可在“解决方案资源管理器”中手动重命名该文件。

重构日志和意图保留

当使用重构功能重命名或移动数据库对象时,项目名称.refactor 文件将使用该操作的详细信息进行更新。 部署您的更改时,日志有助于保留更改的意图,因为部署脚本包含保留此意图的操作。 例如,部署可以针对某一列发出一条 sp_rename 语句,而不是 drop 和 create 语句。

如果两个或更多开发人员进行了更新重构日志的更改,则必须合并对日志文件的更改。 .refactoring 文件是一个具有简单架构的 XML 文件,因此合并更新应当不是一件难事。 每个操作都包含日期和时间,以便您可以确保按正确顺序应用重构操作。

警告

如果自动合并重构日志的更改,则可能出现错误。 在尝试部署数据库项目之前,应始终查看自动合并的结果,或手动合并更改。

重构日志将类似于以下示例:

<?xml version="1.0" encoding="utf-16"?>
<Operations>
  <Operation Name="Move Schema" Key="677a0ee6-1707-413a-985f-b392b1a2d68b" ChangeDateTime="04/07/2008 21:59:00">
    <Property Name="ElementName" Value="[Person].[AbsenceHistory]" />
    <Property Name="ElementType" Value="ISql90Table" />
    <Property Name="NewSchema" Value="HumanResources" />
    <Property Name="IsNewSchemaExternal" Value="True" />
  </Operation>
  <Operation Name="Rename Refactor" Key="fb88992c-cd6e-43d0-aa54-ed80f155d202" ChangeDateTime="04/07/2008 21:59:26">
    <Property Name="ElementName" Value="[HumanResources].[AbsenceHistory].[column_1]" />
    <Property Name="ElementType" Value="ISqlSimpleColumn" />
    <Property Name="ParentElementName" Value="[HumanResources].[AbsenceHistory]" />
    <Property Name="ParentElementType" Value="ISql90Table" />
    <Property Name="NewName" Value="EmployeeID" />
  </Operation>
</Operations>

在此示例日志中,记录了两个重构操作。 在第一个操作中,[AbsenceHistory] 表从 [Person] 架构移动到 [HumanResources] 架构。 在第二个操作中,[AbsenceHistory] 表中的 [column_1] 列重命名为 [EmployeeID]。

请参见

概念

在 Visual Studio 中创建和管理数据库和数据层应用程序

重命名对数据库对象的所有引用

将数据库对象移至另一个架构

重构数据库代码和数据