2009-08-04 50 views
6

Dự án cơ sở dữ liệu Visual Studio 2008 cho SQL Server 2008Dự án triển khai trước trong cơ sở dữ liệu

Dự án có phần giữ chỗ cho tập lệnh SQL trước triển khai và sau triển khai. Họ làm việc - tốt, hầu hết thời gian.

Dự án có tùy chọn Luôn tạo lại cơ sở dữ liệu: thả cơ sở dữ liệu hiện có và tạo cơ sở dữ liệu nóng từ lò nướng mỗi lần.

Khi tôi triển khai cơ sở dữ liệu, toàn bộ SQL Script được đặt cùng nhau và được thực hiện.

Cơ sở dữ liệu của tôi được sử dụng để nhân rộng và là một phần của tập lệnh Post-Deployment, tôi chỉ định máy chủ làm bản phân phối, tạo bản sao và thêm bài viết vào đó.

Vì vậy, tôi phải tắt sao chép. Và vị trí hợp lý để đặt trong Pre-Deploy.

VS2008 lau sạch nụ cười tự mãn khỏi khuôn mặt của tôi khá nhanh. Nếu Always-Recreate-Database được kiểm tra thì nó sẽ đặt kịch bản để thả và tạo lại cơ sở dữ liệu, sau đó đặt tập lệnh Pre-Deployment của tôi, và sau đó là mọi thứ khác.

Có cách nào để tôi thay đổi mẫu của dự án cơ sở dữ liệu sao cho các tập lệnh SQL triển khai trước được thực thi khi chúng được thực hiện - trước khi triển khai xảy ra.

+0

Tôi cũng bị lừa bởi tên Pre-Deployment. –

Trả lời

3

Đây có thể không chính xác những gì bạn đang theo dõi nhưng điều này có thể giúp bạn khắc phục sự cố của mình. sau một cách nhanh chóng, tôi nghĩ rằng việc sắp xếp các kịch bản trước và sau triển khai có thể quá khó thay đổi.

Như tôi đã hiểu, có một số móc trong dự án xây dựng sẽ cho phép bạn thực thi mã của riêng bạn trước khi triển khai bắt đầu.

  1. Xác định thuộc tính PreDeployEvent trong tệp .dbproj của bạn.
  2. Xác định mục tiêu BeforeDeploy trong tệp .dbproj của bạn.

Một trong hai điều này nên được thực hiện vào đúng thời điểm, tôi nghĩ vậy.

Nếu bạn sử dụng thuộc tính PreDeployEvent, bạn sẽ cần chỉ định dòng lệnh đơn lẻ sẽ được thực thi. Một ví dụ thô:

<PropertyGroup> 
    <PreDeployEvent>sqlcmd.exe -i myscript.sql</PreDeployEvent> 
</PropertyGroup> 

Nếu bạn muốn kiểm soát nhiều hơn, sử dụng BeforeDeploy mục tiêu mà sẽ cho phép bạn chạy nhiều một hoặc nhiệm vụ msbuild tùy chỉnh. Dưới đây là một ví dụ thô:

<Target Name="BeforeDeploy"> 
    <Message Text="BeforeDeploy" Importance="high" /> 
</Target> 

Bằng cách này, có rất nhiều nhiệm vụ tùy chỉnh có sẵn miễn phí, một ví dụ là những người ở www.msbuildextensionpack.com.

+0

Tôi đã thử đặt PropertyGroup ở tất cả các vị trí trong dự án, nhưng không có gì có hiệu quả cho đến nay. Có một mẫu bạn biết mà tôi có thể chơi với? –

+1

http://pastie.org/575352 - một vài dòng đầu tiên là đủ. Kiểm tra cửa sổ Output sau khi triển khai - trên VSTS2008 của tôi, tôi nhận được đầu ra nói rằng cơ sở dữ liệu tồn tại trước và sau khi triển khai (cho biết lệnh chạy trước khi DB bị xóa và tái tạo). –

Các vấn đề liên quan