Vấn đề tôi muốn giải quyết là xây dựng các tập lệnh khác nhau tùy thuộc vào cấu hình xây dựng.Dự án Cơ sở dữ liệu SQL: xây dựng các kịch bản khác nhau tùy thuộc vào cấu hình xây dựng
Giả sử chúng ta có hai trường hợp của SQL Server: Phiên bản
- Enterprise với các máy chủ Liên Kết nối
- LocalDb phiên bản dành cho ẩn xây dựng và đơn vị kiểm tra
phiên bản Enterprise có quan điểm cho các máy chủ liên kết khi LocalDB thay thế các khung nhìn đó bằng các bảng cục bộ.
Các chế độ xem Máy chủ được liên kết này và các bảng cục bộ có cùng tên và tập hợp các trường. Vì vậy, chúng không được bao gồm trong xây dựng theo mặc định (Build Action = None). Thay vào đó chúng được bao gồm trong xây dựng trong BeforeBuild Target của tệp dự án.
<Target Name="BeforeBuild">
<ItemGroup Condition=" '$(Configuration)' == 'LocalDb'">
<Build Include="Local_Tables\*.sql" />
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)' != 'LocalDb' ">
<Build Include="Linked_Server_Views\*.sql" />
</ItemGroup>
</Target>
Nhưng vấn đề là Visual Studio lưu trữ Model DB và nếu chúng ta đầu tiên xây dựng dự án cho LocalDb và sau đó cố gắng xây dựng dự án cho cấu hình Enterprise - Visual đầu ra Studio lỗi:
Lỗi: SQL71508: Các mô hình đã có một phần tử có cùng tên
Nếu để đóng và mở giải pháp hoặc dỡ dự án và tải lại dự án, Visual Studio tạo lại các tệp dbmdl và cấu hình doanh nghiệp đang được xây dựng không có lỗi.
Giả sử của tôi là nếu tôi làm mới bộ nhớ cache dbmdl, tôi sẽ nhận được bản dựng trơn tru không có lỗi.
Khi bạn mở hoặc tải lại dự án cơ sở dữ liệu SQL Server trong Visual Studio 2012, nó tạo ra một tập tin với phần mở rộng dbmdl, mà là một mô hình db deserialized và cache như mô tả here.
Trong khoảnh khắc của tập tin dbmdl giải trí Visual Studio kết quả đầu ra như sau:
Deserializing the project state for project 'MyProject.sqlproj'...
Detecting file changes for project 'MyProject.sqlproj'...
Deserialization has been completed for project 'MyProject.sqlproj'.
Làm thế nào để buộc Visual Studio để làm mới bộ nhớ cache dbmdl mà không cần tải lại dự án và không thay đổi của tập tin xml dự án?
Có cách nào để làm mới bộ nhớ cache dbmdl đặt lệnh vào mục BeforeBuild hoặc AfterBuild của tệp xml dự án không?
Hoặc toàn bộ cách tiếp cận vấn đề là sai và có một cách khác để xây dựng các tập lệnh khác nhau tùy thuộc vào cấu hình xây dựng?
Peter cảm ơn bạn đã trả lời. Tôi vẫn không có giải pháp cho câu hỏi của tôi. Tôi sẽ cố gắng tư vấn cho dự án tiếp theo. Nhưng tôi đoán là việc di chuyển việc tạo bảng/lượt xem sang kịch bản Post-Deploy sẽ cho chúng ta lỗi trong khi xây dựng, bởi vì các đối tượng khác tham khảo các bảng/khung nhìn đó. –
Vâng, về mặt kỹ thuật, bạn có thể rời khỏi chế độ xem "cục bộ" cho dự án của mình để mọi thứ sẽ được xây dựng, sau đó thêm phần sau triển khai để điều chỉnh tất cả để chạy với máy chủ được liên kết chỉ khi bạn sử dụng chúng. Tôi đồng ý nó không phải là cách tốt nhất để xử lý nó, nhưng nó sẽ làm việc nếu bạn làm theo cách đó. –
Bạn có thể có một tùy chọn có thể khác trong việc sử dụng các dự án tổng hợp. Jamie Thompson viết blog về chúng ở đây: http://sqlblog.com/blogs/jamie_thomson/archive/2013/03/10/deployment-of-client-specific-database-code-using-ssdt.aspx –