2010-03-26 40 views
7

Một ứng dụng có sử dụng cơ sở dữ liệu SQL. Ứng dụng đã được phát hành, nhưng bây giờ tôi đang làm việc trên một bản cập nhật. Trong bản cập nhật, tôi đã thêm một cột phụ trong một bảng cơ sở dữ liệu của tôi.Thay đổi DBML, cách thay đổi cơ sở dữ liệu SQL?

Tôi đã tạo ra cơ sở dữ liệu từ DMBL tôi sử dụng DataContext.CreateDatabase() (không phải là cách khác xung quanh, như tôi phát hiện ra là kịch bản phổ biến hơn sau này)

tôi có một cơ sở trong LINQ trong đó Tôi có thể cập nhật lược đồ cơ sở dữ liệu SQL của mình không?

Trả lời

1

Không, xin lỗi. Tôi cũng muốn có một cơ sở như vậy. Bạn phải nâng cấp cơ sở dữ liệu của mình bằng tay.

Dưới đây là phương pháp:

  • Tạo một Stored Procedure gọi là một cái gì đó như "spGetDBVersion". Thủ tục này chỉ trả về một số nguyên của phiên bản cơ sở dữ liệu được triển khai hiện tại của bạn.
  • Khi khởi động/cài đặt, hãy kiểm tra quy trình đó nếu kết quả phù hợp với phiên bản mà Chương trình của bạn mong đợi.
  • Nếu không -> thực thi tập lệnh cập nhật theo đúng thứ tự. Ví dụ: nếu spGetDBVersion trả 2 và ứng dụng của bạn hy vọng 5 sau đó bạn phải thực hiện Update_To_3.sql, Update_To_4.sql và Update_To_5.sql

Gợi ý: Sau khi phát hành ban đầu tôi không bao giờ thay đổi schema cơ sở dữ liệu của tôi với một công cụ. Tôi luôn luôn kịch bản thay đổi và đặt nó trong kịch bản cập nhật tiếp theo của tôi.

Không phải những gì bạn đã hỏi, nhưng đó là giải pháp thực tế.

Một UpdateScript có thể trông như thế này:

** giả **

-- Update to version 2 
alter table [MyTable] add newColumn int null 
GO 
update [MyTable] set [newColumn] = 0 
GO 
alter table [MyTable] change newColumn int not null 
GO 
alter procedure spGetDBVersion 
as 
begin 
    select 2 as CurrentVersion 
end 
+0

Tuyệt vời, tôi thích giải pháp này! –

0

Nếu bạn thay đổi bảng trong cơ sở dữ liệu, bạn nên xóa các bảng tương ứng từ tập tin dbml. Thêm lại và tệp dbml sẽ tái tạo lại, do đó thay đổi của bạn có hiệu lực.

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