<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      微軟ASP.NET站點(diǎn)部署指南(11):部署SQL Server數(shù)據(jù)庫更新

      2011-12-05 12:42  湯姆大叔  閱讀(2470)  評論(0)    收藏  舉報(bào)

      1. 綜述

      本章節(jié)展示的是如何向完整版SQL Server 數(shù)據(jù)庫部署一個(gè)數(shù)據(jù)庫升級。與第9章的數(shù)據(jù)庫升級部署有所不同(第9章是部署到SQL Server Compact數(shù)據(jù)庫)。

      提醒:如果根據(jù)本章節(jié)所做的操作出現(xiàn)錯(cuò)誤信息或一些功能不正常的話,請務(wù)必check Troubleshooting頁面

      2. 給表添加新列

      這個(gè)小節(jié),做一個(gè)數(shù)據(jù)庫修改和相應(yīng)的代碼更新,在部署到測試和生產(chǎn)環(huán)境之前,先在Visual Studio 里測試。修改內(nèi)容是給Instructor 實(shí)體添加一個(gè)OfficeHours 列,然后再Instructors 頁面上顯示。

      ContosoUniversity.DAL項(xiàng)目里打開Instructor.cs文件,在HireDate和Courses之間添加如下代碼:

      [MaxLength(50)]
      public string OfficeHours { get; set; }

       

      更新初始化器類,以便添加測試數(shù)據(jù)。打開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項(xiàng)目,打開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>

       

      運(yùn)行程序,訪問Instructors頁面,運(yùn)行稍微有點(diǎn)慢,因?yàn)镋ntity Framework需要重新創(chuàng)建數(shù)據(jù)庫和插入數(shù)據(jù):

       

      3. 為數(shù)據(jù)庫更新創(chuàng)建SQL腳本

      前面章節(jié)的SQL Server Compact 數(shù)據(jù)庫修改部署,然后同樣的方式部署測試和生產(chǎn)環(huán)境,但在本章這種方式不行,你需要?jiǎng)?chuàng)建SQL腳本來更新數(shù)據(jù)庫,因?yàn)橥暾鍿QL Server 數(shù)據(jù)庫不能通過像SQL Server Compact 數(shù)據(jù)庫一樣通過復(fù)制的方式來部署。第9章指出有可以進(jìn)行數(shù)據(jù)庫比較然后自動(dòng)創(chuàng)建數(shù)據(jù)庫更新腳本。本章節(jié),將已經(jīng)生產(chǎn)的腳本提供給你。

       

      想知道Code First為數(shù)據(jù)庫做了什么,重新打開Server Explorer,你需要添加一個(gè)connection連接到新數(shù)據(jù)庫SchoolDev上。

      Server Explorer里,右鍵Data Connections,選擇Add Connection,在Add Connection對話框的Server Name里輸入.\SQLExpress,然后打開Select or enter a database name下拉菜單選擇SchoolDev數(shù)據(jù)庫。

       

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

       

      Properties窗口,可以看到這個(gè)列的數(shù)據(jù)類型是nvarchar ,長度是50。

       

      Server Explorer里,右鍵SchoolDev數(shù)據(jù)庫,選擇Close Connection

      下面的腳本是添加一個(gè)列到Person表, table,復(fù)制這些腳本保存成AddOfficeHoursColumn.sql文件,放到SolutionFiles方案文件夾里。

      View Code
      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

      GO

      ALTER TABLE dbo.OfficeAssignment

      DROP CONSTRAINT Instructor_OfficeAssignment

      GO

      DROP TABLE dbo.Person

      GO

      EXECUTE sp_rename N'dbo.Tmp_Person', N'Person', 'OBJECT'

      GO

      ALTER TABLE dbo.Person ADD CONSTRAINT

      PK__Person__000000000000002C PRIMARY KEY CLUSTERED

      (

      PersonID

      ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]



      GO

      COMMIT

      BEGIN TRANSACTION

      GO

      ALTER TABLE dbo.OfficeAssignment ADD CONSTRAINT

      Instructor_OfficeAssignment FOREIGN KEY

      (

      PersonID

      ) REFERENCES dbo.Person

      (

      PersonID

      ) ON UPDATE NO ACTION

      ON DELETE NO ACTION



      GO

      ALTER TABLE dbo.OfficeAssignment SET (LOCK_ESCALATION = TABLE)

      GO

      COMMIT

      BEGIN TRANSACTION

      GO

      ALTER TABLE dbo.Enrollment ADD CONSTRAINT

      Student_Enrollments FOREIGN KEY

      (

      PersonID

      ) REFERENCES dbo.Person

      (

      PersonID

      ) ON UPDATE NO ACTION

      ON DELETE CASCADE



      GO

      ALTER TABLE dbo.Enrollment SET (LOCK_ESCALATION = TABLE)

      GO

      COMMIT

      BEGIN TRANSACTION

      GO

      ALTER TABLE dbo.Department ADD CONSTRAINT

      Department_Administrator FOREIGN KEY

      (

      PersonID

      ) REFERENCES dbo.Person

      (

      PersonID

      ) ON UPDATE NO ACTION

      ON DELETE NO ACTION



      GO

      ALTER TABLE dbo.Department SET (LOCK_ESCALATION = TABLE)

      GO

      COMMIT

      BEGIN TRANSACTION

      GO

      ALTER TABLE dbo.CourseInstructor ADD CONSTRAINT

      Course_Instructors_Target FOREIGN KEY

      (

      PersonID

      ) REFERENCES dbo.Person

      (

      PersonID

      ) ON UPDATE NO ACTION

      ON DELETE CASCADE



      GO

      ALTER TABLE dbo.CourseInstructor SET (LOCK_ESCALATION = TABLE)

      GO

      COMMIT

       

      你也可以創(chuàng)建一個(gè)腳本更新OfficeHours 列的數(shù)據(jù),不過,程序部署以后用戶自己會(huì)更新這個(gè)值的。

      4. 部署數(shù)據(jù)庫更新到測試環(huán)境

      對于測試環(huán)境,在第一次部署時(shí)用到的schema 腳本,數(shù)據(jù)插入腳本,賦權(quán)腳本都不能再執(zhí)行了。在這里你只需要執(zhí)行剛才新建立的SQL腳本。

      打開Project Properties窗口選擇Package/Publish Web選項(xiàng)卡,確保Configuration框里選擇Active (Test)Test。

      確保選擇了Include all databases configured in Package/Publish SQL tab項(xiàng)。

       

      選擇Package/Publish SQL選項(xiàng)卡,確保Configuration還是Test,在Database Entries表格里,取消選擇DefaultConnection-Deployment,因?yàn)椴恍枰逻@個(gè)membership數(shù)據(jù)庫。

      Database Entries表格里,選擇SchoolContext-Deployment行以便設(shè)置School數(shù)據(jù)庫的配置信息。

      Database Entry Details面板取消選擇Database Scripts表格里的2個(gè)行,取消Pull data and/or schema from an existing database項(xiàng)。

      Database Scripts表里點(diǎn)擊Add Script,在彈出的Select File對話框里選擇AddOfficeHoursColumn.sql 文件,點(diǎn)擊Open。

       

      完成以后,Package/Publish SQL選項(xiàng)卡應(yīng)該是這樣的:

       

      Solution Configurations下拉菜單選擇Test,在Publish profile下拉菜單里選擇Test,點(diǎn)擊Publish Web。(如果你自定義了你的Visual Studio使這些工具欄的這些設(shè)置不能用的話,請參考第8章的內(nèi)容)

       

      Visual Studio部署了修改后的程序,并在Output窗口顯示了成功信息。

       

      重新運(yùn)行程序,驗(yàn)證部署結(jié)果是否正常,這時(shí)候你將看到多了一個(gè)office hours新列,當(dāng)你編輯一個(gè)instructor 的時(shí)候,Office Hours 的值就會(huì)添加到該列里了。

       

       

      5. 部署數(shù)據(jù)庫更新到生產(chǎn)環(huán)境

      除了在部署前上傳app_offline.htm文件,部署后刪除該文件以外,其它的部署流程和部署測試環(huán)境的流程是一模一樣的。

      完成配置以后,Package/Publish SQL選項(xiàng)卡應(yīng)該是這樣的:

       

      完成以后,可以部署到生產(chǎn)環(huán)境了。在Solution Configurations下拉菜單里選擇Release ,在Publish下拉菜單里選擇Production,點(diǎn)擊Publish Web。(如果你自定義了你的Visual Studio使這些工具欄的這些設(shè)置不能用的話,請參考第8章的內(nèi)容)

       

      Visual Studio部署了修改后的程序,并在Output窗口顯示了成功信息。

       

      測試之前,需要?jiǎng)h除app_offline.htm文件。

      重新打開程序,驗(yàn)證該部署是否正常。下圖顯示,Office Hours列上顯示了編輯的數(shù)據(jù),也就是部署是OK的。

       

      現(xiàn)在已經(jīng)成功部署了含有數(shù)據(jù)庫更新的程序,在部署到SQL Server Express和SQL Server的時(shí)候試用了同樣的SQL腳步。

      6. 更多信息

      至此,部署ASP.NET 程序到第三方提供商的教材已經(jīng)全部結(jié)束了,諸如如何使用一個(gè)部署包部署ContosoUniversity程序的話,請參看:Using a Web Deploy package to deploy to IIS on the dev box and to a third party host。更多類似的文章,請參看: ASP.NET Deployment Content Map

      7. 致謝

      感謝如下列表的人員,他們?yōu)榇私坛套龀隽俗吭降呢暙I(xiàn):

       

      主站蜘蛛池模板: 国产精品自拍中文字幕| 日韩有码中文字幕一区二区| 久久综合九色综合97欧美| 狠狠色婷婷久久综合频道日韩| 亚洲一区二区三区丝袜| 亚洲a∨国产av综合av| 国产人与禽zoz0性伦多活几年| 亚洲精品一二三四区| av偷拍亚洲一区二区三区| 久久精品无码一区二区小草| 人妻中出无码一区二区三区| 亚洲精品综合一区二区三区| 精品国产成人国产在线视| 性xxxx欧美老妇胖老太性多毛| 成人av久久一区二区三区| 亚洲区一区二区三区精品| 日韩乱码人妻无码中文字幕视频 | 成人免费在线播放av| 亚洲成aⅴ人在线电影| 久久综合久中文字幕青草| 国产二区三区不卡免费| 美女黄网站人色视频免费国产| 国产日产精品系列| 性色av 一区二区三区| 日韩av天堂综合网久久| 国产精品久久露脸蜜臀| 少妇高潮毛片免费看| 国产互换人妻xxxx69| 白丝乳交内射一二三区| 熟妇人妻不卡中文字幕| 网友偷拍视频一区二区三区| 国产亚洲一二三区精品| 三上悠亚在线精品二区| 五月天国产成人av免费观看| 国产偷国产偷亚洲高清人| 乱人伦中文视频在线| 国产一区在线播放av| 61精品人妻一区二区三区| 国产精品国产三级国av| 日本中文一二区有码在线| 美女自卫慰黄网站|