2010-03-26 18 views
7

A, bir SQL veritabanı kullanan bir uygulama var. Uygulama zaten yayınlandı, ancak şimdi bir güncelleme üzerinde çalışıyorum. Güncellemede veritabanımın bir tablosuna fazladan bir sütun ekledim.DBML'nin değiştirilmesi, SQL veritabanının nasıl değiştirileceği?

(Ben daha sonra daha yaygın senaryo olduğu ortaya bulduğumuz gibi, tersi değil) Ben DataContext.CreateDatabase() kullanarak DMBL gelen veritabanı oluşturmak ettik orada LINQ bir tesis ettiği SQL veritabanı şemasını güncelleyebilir miyim?

cevap

1

Hayır, özür dilerim. Ayrıca böyle bir tesise sahip olmak isterim. Veritabanınızı el ile yükseltmelisiniz.

İşte Yöntem var:

  • bir saklı yordam "spGetDBVersion" gibi bir şey denir oluşturun. Bu Prosedür sadece mevcut dağıtımlı Veritabanı sürümünüzün bir Tamsayı döndürür.
  • Başlangıç ​​/ yükleme zamanında, sonuç, Programınızın beklediği sürümle eşleşiyorsa bu prosedürü kontrol edin.
  • Değilse -> güncelleme komut dosyalarını doğru sırada yürüt. Örnek: spGetDBVersion 2 geri döndüğünü ve uygulama 5 o zaman Update_To_3.sql, Update_To_4.sql ve Update_To_5.sql yürütmek zorunda bekliyorsa

İpucu: ilk sürümde sonra bir araç ile benim veritabanı şemasını hiç değişmez. Her zaman bu değişikliği betimliyorum ve bir sonraki güncelleme betiğimde yazdım.

Sorduğun bu değil, ama uygulanabilir bir çözüm.

Bir UpdateScript aşağıdaki gibi görünebilir:

** Pseudocode **

-- 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

Mükemmel, bu çözümü beğendim! –

0

Eğer veritabanında tablo değiştirirseniz dbml dosyadan gelen tabloyu silmek gerekir. Yeniden ekle ve dbml dosyası yeniden oluşturulmalı, böylece değişiklikleriniz geçerli olacaktır.

İlgili konular