2016-01-30 14 views
6

Tôi đã thiết lập tích hợp liên tục cho dự án của mình với các định nghĩa xây dựng Visual Studio Online.Làm thế nào tôi có thể chạy migrate.exe của Entity Framework từ Visual Studio Online?

Khi nói đến việc triển khai cơ sở dữ liệu của tôi (đến môi trường thử nghiệm Azure), tôi chỉ cần xây dựng SQL Server Database Project của mình với cài đặt xuất bản phù hợp.

Nhưng tôi muốn chuyển sang phương thức tiếp cận đầu tiên của mã Entity Framework và tận dụng tính năng di chuyển, yêu cầu tôi gọi migrate.exe.

Câu hỏi của tôi là - làm cách nào tôi có thể chạy migrate.exe từ VSO tạo định nghĩa?

+0

Bạn đang sử dụng hệ thống xây dựng nào? vNext hoặc XAML? –

+0

Tôi đang sử dụng vNext. Cảm ơn bạn! – user11081980

Trả lời

7

Tôi giả sử bạn đang sử dụng vNext build, thêm tác vụ "Nuget Installer" vào định nghĩa xây dựng của bạn trước tiên để khôi phục khung Entity trong khi xây dựng. Migrate.exe sẽ được cài đặt trong thư mục \ packages \ EntityFramework. \ Tools. Sau đó, thêm một nhiệm vụ "Dòng lệnh" để chạy migrate.exe. Nhập “\ gói \ EntityFramework. \ Tools \ migrate.exe" trong khu vực 'Tool' và các đối số trong 'luận cứ' lĩnh vực.

+3

Như tôi biết, không thể sử dụng các ký tự đại diện trong tác vụ Dòng lệnh. Vậy làm thế nào để loại bỏ sự phụ thuộc từ phiên bản EF? – alexey

+0

Tôi nhận được lỗi sau. Bất kỳ ý tưởng? Không thể tải tệp hoặc lắp ráp 'EntityFramework, Version = 6.0.0.0 Chạy trên hệ thống tạo vNext. – TWilly

+0

@TWilly Tham khảo liên kết này về cách sử dụng migrate.exe: https://msdn.microsoft.com/en-sg/data/jj618307.aspx –

3

Bạn cũng có thể nhìn vào thực hiện cuộc di cư của bạn tại thời gian khởi động ứng dụng.

add sau đây để Application_Start() của sự kiện trong global.asax

var configuration = new Configuration(); 
var migrator = new DbMigrator(configuration); 
migrator.Update(); 

này sẽ cháy di cư mỗi khi khởi động ứng dụng. bạn cũng có thể quấn với logic có điều kiện để kiểm soát nó như thế nào là bắn.

+0

Yup. Như được mô tả ở đây https://blogs.msdn.microsoft.com/webdev/2014/04/08/ef-code-first-migrations-deployment-to-an-azure-cloud-service/ – JackMorrissey

+1

Tôi tin rằng đây là cách tiếp cận rất nguy hiểm vì bạn sẽ không biết về các vấn đề di chuyển cho đến khi cuộc gọi đầu tiên đến trang web của bạn. Tôi chắc chắn sẽ ủng hộ một bước nâng cấp cụ thể cho cơ sở dữ liệu như một bước rõ ràng. –

6

Chúng tôi đã đã triển khai thành công mã EF tự động di cư đầu tiên vào thời điểm triển khai trên đầu trang của TFS Xây dựng vNext theo cách sau:

Về cơ bản nó bao gồm 3 bước (mỗi EF-ngữ cảnh):

  1. Sao chép EF-dự án vào một thư mục dàn
  2. Sao chép migrate.exe trong cùng một thư mục (migrate.exe đòi hỏi phải được đặt ngay bên cạnh để lắp ráp chứa di cư EF)
  3. Execute migrate.exe

Cụ thể:

  1. Sao chép tập tin "nhiệm vụ"
      thư mục
    • Nguồn: $ (build.sourcesdirectory)
    • Nội dung: Contoso.EF \ bin \ debug \ **
    • Target folder: $ (build.artifactstagingdirectory)/EF
  2. Sao chép tập tin "nhiệm vụ"
    • Thư mục nguồn: $ (build.sourcesDirectory) \ packages \ EntityFramework.6.1.3 \ tools
    • Nội dung: migrate.exe
    • Thư mục đích: $ (build.artifactstagingdirectory) \ EF \ Contoso.EF \ bin \ debug \ bin \ debug
  3. hàng loạt kịch bản "nhiệm vụ"
    • Đường dẫn: $ (build.sourcesdirectory) _Deploy \ MigrateEFContext.bat
    • Arguments: $ (build.artifactstagingdirectory) \ EF \ Contoso.EF \ bin \ debug Contoso.EF.dll [SQL-SERVER-INSTANCE] [dbname] System.Data.SqlClient

File MigrateEFContext.bat lắp ráp các migrate.exe-lệnh với các đối số của nó:

SET EFDir=%1 
SET EFContext=%2 
SET connStringDataSource=%3 
SET connStringInitialCatalog=%4 
SET connectionProviderName=%5 

%EFDIR%\migrate.exe %EFContext% /ConnectionString:"Data Source=%connStringDataSource%;Initial Catalog=%connStringInitialCatalog%;Integrated Security=true" /connectionProviderName:%connectionProviderName% /verbose 
Các vấn đề liên quan