19

Tôi đang cố gắng sử dụng Dự án Cơ sở dữ liệu SQL Server để giữ tất cả các bảng, thủ tục lưu trữ, tập lệnh v.v. Tôi bây giờ wan một cách để có thể giữ tất cả các tham chiếu của chúng tôi (hoặc tĩnh) dữ liệu là tốt. Khi công cụ hoặc dự án được chạy, nó sẽ cài đặt tất cả các đối tượng DB và chèn tất cả các dữ liệu tham chiếu.Làm cách nào để lưu trữ dữ liệu tĩnh trong Dự án Cơ sở dữ liệu SQL Server của bạn trong VS 2012

Tôi đã tìm thấy các bài viết tương tự cho năm 2010 nhưng họ đã sử dụng những thứ như Team Edition cho các chuyên gia cơ sở dữ liệu.

  • Lấy DB của chúng tôi dưới sự kiểm soát nguồn.
  • Đồng bộ hóa DB phát triển địa phương của chúng tôi với phiên bản mới nhất trong kiểm soát nguồn.
  • Làm việc với Visual Studio 2012 và SQL Server 2012
  • Sử dụng các công cụ .Net càng nhiều càng tốt và không giống như Redgate (Redgate là tuyệt vời nhưng tôi vẫn chưa muốn sử dụng công cụ này nếu tôi có thể sử dụng công cụ trong VS 2012)
+0

Tại sao không sử dụng Mã khung thực thể trước? Bạn có thể sử dụng nó để mô hình hóa tất cả các bảng/mối quan hệ cơ sở dữ liệu của bạn bằng cách sử dụng các lớp POCO + DataAnnotations hoặc Fluent API. Sau đó, EF Migrations có thể xử lý kiểm soát phiên bản DB của bạn và/hoặc lấy dữ liệu tham chiếu của bạn. – Kittoes0124

Trả lời

22

bạn có thể sử dụng phương pháp này:

  • Đặt dữ liệu tham khảo của bạn vào các tập tin XML, mỗi bảng
  • Thêm file XML với dữ liệu tham khảo cho dự án cơ sở dữ liệu của bạn
  • Sử dụng tập lệnh Post-Deployment để trích xuất dữ liệu từ XML và nhập nó vào các bảng của bạn

Dưới đây là mô tả chi tiết hơn về từng bước, được minh họa bằng ví dụ. Hãy nói rằng bạn cần phải khởi tạo một bảng của các nước có cấu trúc này:

create table Country (
    CountryId uniqueidentifier NOT NULL, 
    CountryCode varchar(2) NOT NULL, 
    CountryName varchar(254) NOT NULL 
) 

Tạo một thư mục mới có tên gọi ReferenceData thuộc dự án cơ sở dữ liệu của bạn. Đó phải là thư mục anh chị em của số Schema ObjectsScripts.

Thêm tệp XML mới có tên Country.xml vào thư mục ReferenceData. Cư tập tin như sau:

<countries> 
    <country CountryCode="CA" CountryName="Canada"/> 
    <country CountryCode="MX" CountryName="Mexico"/> 
    <country CountryCode="US" CountryName="United States of America"/> 
</countries> 

Tìm Script.PostDeployment.sql, và thêm đoạn mã sau vào nó:

DECLARE @h_Country int 

DECLARE @xmlCountry xml = N' 
:r ..\..\ReferenceData\Country.xml 
' 

EXEC sp_xml_preparedocument @h_Country OUTPUT, @xmlCountry 

MERGE Country AS target USING (
    SELECT c.CountryCode, c.CountryName 
    FROM OPENXML(@h_Country, '/countries/country', 1) 
    WITH (CountryCode varchar(2), CountryName varchar(254)) as c) AS source (CountryCode, CountryName) 
ON (source.CountryCode = target.CountryCode) 
WHEN MATCHED THEN 
    UPDATE SET CountryName = source.CountryName 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (CountryId, CountryCode, CountryName) values (newid(), source.CountryCode, source.CountryName) 
; 

tôi đã cố gắng giải pháp này chỉ trong VS 2008, nhưng nó phải là bất khả tri đến môi trường phát triển của bạn.

+0

Vì bạn là người duy nhất để tình nguyện một ý kiến, bạn có thể có một số danh tiếng. :) – uriDium

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