当前位置:数据库 > SQLServer >>

微软ASP.NET站点部署指南(11):部署SQL Server数据库更新

1. 综述

本章节展示的是如何向完整版SQL Server 数据库部署一个数据库升级。与第9章的数据库升级部署有所不同(第9章是部署到SQL Server Compact数据库)。

提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面。

2. 给表添加新列

这个小节,做一个数据库修改和相应的代码更新,在部署到测试和生产环境之前,先在Visual Studio 里测试。修改内容是给Instructor 实体添加一个OfficeHours 列,然后再Instructors 页面上显示。

 

ContosoUniversity.DAL项目里打开Instructor.cs文件,在HireDate和Courses之间添加如下代码:

 

[MaxLength(50)]

public string OfficeHours { get; set; }

 

 

更新初始化器类,以便添加测试数据。打开SchoolInitializer.cs文件替换以var instructors = new List<Instructor>开头的代码块:

 

View Code

var instructors = new List<Instructor>

{

    new Instructor { FirstMidName = "Kim",     LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), BirthDate = DateTime.Parse("1918-08-12"), OfficeHours = "8-9AM, 4-5PM" },

    new Instructor { FirstMidName = "Fadi",    LastName = "Fakhouri",    HireDate = DateTime.Parse("2002-07-06"), BirthDate = DateTime.Parse("1960-03-15") },

    new Instructor { FirstMidName = "Roger",   LastName = "Harui",       HireDate = DateTime.Parse("1998-07-01"), BirthDate = DateTime.Parse("1970-01-11"), OfficeHours = "6AM-6PM" },

    new Instructor { FirstMidName = "Candace", LastName = "Kapoor",      HireDate = DateTime.Parse("2001-01-15"), BirthDate = DateTime.Parse("1975-04-11") },

    new Instructor { FirstMidName = "Roger",   LastName = "Zheng",       HireDate = DateTime.Parse("2004-02-12"), BirthDate = DateTime.Parse("1957-10-12"), OfficeHours = "By appointment only" }

};

 

 

在ContosoUniversity项目,打开Instructors.aspx文件,在</Columns>之前添加如下代码:

 

<asp:TemplateField HeaderText="Office Hours">

    <ItemTemplate>

        <asp:Label ID="InstructorOfficeHoursLabel" runat="server" Text='<%# Eval("OfficeHours") %>'></asp:Label>

    </ItemTemplate>

    <EditItemTemplate>

        <asp:TextBox ID="InstructorOfficeHoursTextBox" runat="server" Text='<%# Bind("OfficeHours") %>'

            Width="14em"></asp:TextBox>

    </EditItemTemplate>

</asp:TemplateField>

 

运行程序,访问Instructors页面,运行稍微有点慢,因为Entity Framework需要重新创建数据库和插入数据:

 

\

3. 为数据库更新创建SQL脚本

前面章节的SQL Server Compact 数据库修改部署,然后同样的方式部署测试和生产环境,但在本章这种方式不行,你需要创建SQL脚本来更新数据库,因为完整版SQL Server 数据库不能通过像SQL Server Compact 数据库一样通过复制的方式来部署。第9章指出有可以进行数据库比较然后自动创建数据库更新脚本。本章节,将已经生产的脚本提供给你。

 

想知道Code First为数据库做了什么,重新打开Server Explorer,你需要添加一个connection连接到新数据库SchoolDev上。

Server Explorer里,右键Data Connections,选择Add Connection,在Add Connection对话框的Server Name里输入.\SQLExpress,然后打开Select or enter a database name下拉菜单选择SchoolDev数据库。

 

\

展开SchoolDev->Tables->Person->Columns,可以看到OfficeHours列。

 

\

在Properties窗口,可以看到这个列的数据类型是nvarchar ,长度是50。

 

\

在Server Explorer里,右键SchoolDev数据库,选择Close Connection。

下面的脚本是添加一个列到Person表, table,复制这些脚本保存成AddOfficeHoursColumn.sql文件,放到SolutionFiles方案文件夹里。

BEGIN TRANSACTION

 

SET QUOTED_IDENTIFIER ON

 

SET ARITHABORT ON

 

SET NUMERIC_ROUNDABORT OFF

 

SET CONCAT_NULL_YIELDS_NULL ON

 

SET ANSI_NULLS ON

 

SET ANSI_PADDING ON

 

SET ANSI_WARNINGS ON

 

COMMIT

 

BEGIN TRANSACTION

 

GO

 

CREATE TABLE dbo.Tmp_Person

 

        (

 

        PersonID int NOT NULL IDENTITY (15, 1),

 

        LastName nvarchar(50) NOT NULL,

 

        FirstName nvarchar(50) NOT NULL,

 

        BirthDate datetime NULL,

 

        HireDate datetime NULL,

 

        OfficeHours nvarchar(50) NULL,

 

        EnrollmentDate datetime NULL,

 

        Discriminator nvarchar(128) NOT NULL

 

        )  ON [PRIMARY]

 

GO

 

ALTER TABLE dbo.Tmp_Person SET (LOCK_ESCALATION = TABLE)

 

GO

 

SET IDENTITY_INSERT dbo.Tmp_Person ON

 

GO

 

IF EXISTS(SELECT * FROM dbo.Person)

 

         EXEC('INSERT INTO dbo.Tmp_Person (PersonID, LastName, FirstName, BirthDate, HireDate, EnrollmentDate, Discriminator)

 

                SELECT PersonID, LastName, FirstName, BirthDate, HireDate, EnrollmentDate, Discriminator FROM dbo.Person WITH (HOLDLOCK TABLOCKX)')

 

GO

 

SET IDENTITY_INSERT dbo.Tmp_Person OFF

 

GO

 

ALTER TABLE dbo.CourseInstructor

 

        DROP CONSTRAINT Course_Instructors_Target

 

GO

 

ALTER TABLE dbo.Department

 

        DROP CONSTRAINT Department_Administrator

 

GO

 

ALTER TABLE dbo.Enrollment

 

        DROP CONSTRAINT Student_Enrollments

补充:Web开发 , ASP.Net ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,