Linq to SQL dbml dosyasını nasıl güncelleyebilirim?


204

Linq to SQL .dbml dosyasını nasıl güncelleştiririm?

Yanıtlar:


258

Modeli senkronize etmenin üç yolu vardır.

  1. Değiştirilen tabloları tasarımcıdan silin ve Veritabanı Gezgini'nden tasarımcı yüzeyine geri sürükleyin. Bunun güvenilir bir şekilde çalışması için şunları yapmanız gerektiğini buldum:

    a. Veritabanı Gezgini'nde veritabanı şemasını yenileyin (sağ tıklayın, yenileyin)
    b. Tabloları sildikten sonra tasarımcıyı kaydedin
    c. Tabloları geri sürükledikten sonra tekrar kaydedin.

    Not (bir dernek çocuk özelliği kapatarak, örneğin) herhangi değişikliğe uğramış özellikler takdirde, bu besbelli bu modifikasyonları kaybedecek olsa - Yine bunları yapmak gerekecek.

  2. Şemayı veritabanınızdan yeniden oluşturmak için SQLMetal kullanın. Ben göstermek blog gönderileri bir dizi gördük nasıl komut dosyasına bu .

  3. Doğrudan DBML'nin Özellikler bölmesinde değişiklik yapın. Bu, bir alanda boş değerlere izin vermek gibi basit değişiklikler için geçerlidir.

DBML tasarımcısı Visual Studio 2015, 2017 veya 2019'da varsayılan olarak yüklenmez. VS'yi kapatmanız, VS yükleyicisini başlatmanız ve yüklemenizi değiştirmeniz gerekir. SQL araçlarına LINQ yüklemek gerekir özelliğidir. VS 2017/2019 için, Bireysel Bileşenler> Kod Araçları altında bulabilirsiniz .


1
1a ve 1c'yi 1b olmadan denemiştim ve bir görünümde basit bir seçim yaparken 'Belirtilen döküm geçerli değil' hataları alıyordum. 1b dahil benim için düzeltti
tomfumb

6
VS destek üzerinde istendi connect.microsoft.com/VisualStudio/feedback/details/260723/... ancak MS düzeltme istemiyoruz.
Michael Freidgeim

İlk yöntemi denedim ve işe yaradı. Sanırım küçük bir DB için çalışacaktır.
Muhammedh

2019 yılının sonunda, bilgisayar programlamanın ne olduğunu bilmeden önce bir cevaba ihtiyacım vardı ... Bu çok ayrıntılı ve harika!
PSGuy

54

.Dbml diyagramınızdaki bir tabloyu, örneğin eklenen sütunlarla güncellemek için şunu yapın:

  1. SQL Server Explorer pencerenizi güncelleyin.
  2. Tablonuzun "yeni" sürümünü .dbml diyagramına sürükleyin (aşağıdaki resimde rapor1).

report1 tablonun yeni sürümüdür

  1. Tablonun yeni sürümünde eklenen sütunları işaretleyin, eklenen sütunları kopyalamak için Ctrl+ tuşuna basın C.

eklenen sütunları kopyala

  1. Tablonuzun "eski" sürümünü tıklayın ve eklenen sütunları tablonun zaten mevcut sürümüne yapıştırmak için Ctrl+ tuşuna basın V.

eklenen sütunları tablonun eski sürümüne yapıştırın


4
Bu, ekstra alet gerektirmeyen ve VS2017'de gayet iyi çalışan en kolay, en az yıkıcı yöntem gibi görünüyor
Toby

1
Bu, kabul edilen cevaptan çok daha az müdahaleci ve 2018'in sonunda iyi çalışmaya devam ediyor!
Mark

1
Bu, hızlı (ve şemada çok hızlı olmayan düzenlemeler) için en iyi yanıttır. Model görünümünü güzelleştirmek için çok zaman aldım. Güncelleme dosyalarını silmekten ve sürüklemekten nefret ettim. Eklenen alanlar için bu harika çalışıyor!
Hucker

1
Benim için bu iki sorunu çözdü. Birincisi, tabloya benzer bir alanı kopyalayıp yapıştırmaya ve sonra yeniden adlandırmaya çalıştığım zamandı. Doğrulama yapılırken kesintisiz "belirtilmemiş" derleme hatası oluştu. Diğer bir sorun, tabloyu kaldırıp daha sonra bütününe geri eklediğimde, git'te çok daha büyük farklılıklara neden oldu (çünkü nesneler dosya içinde yeniden düzenlendi). Bu yöntemle, sadece daha sonra anlaşılması çok daha temiz ve daha kolay olan yeni alanın eklenmesini görüyorum.
goug

BTW, "Tasarımcıya eklediğiniz nesneler, tasarımcıdan farklı bir veri bağlantısı kullanıyor ..."
sorulduğunda

5

Ayrıca LinS -to-SQL için ve çok düzgün şeyler yapmanıza izin veren CodeSmith'e dayanan PLINQO kod oluşturma şablonları kümesine de göz atabilirsiniz :

  • sınıf başına bir dosya oluştur (tek, büyük bir dosya yerine)
  • modelinizi gerektiği gibi güncelleyin
  • daha birçok özellik

Http://www.plinqo.com adresindeki PLINQO sitesine göz atın ve tanıtım videolarına göz atın.

Bildiğim ikinci araç , DBML (Linq-to-SQL) ve EDMX (Entity Framework) eşleme dosyalarının ve daha fazlasının (adlandırma kuralları vb.) Güncellenmesine izin veren Huagati DBML / EDMX araçlarıdır .

üzüm posası


Sadece CodeSmith söküldü olması / PLINQO şiddetle tavsiye karşı bu yaklaşımı alarak. Bu cevabın 4 yaşından büyük olduğu ...
Yuck

@Yuck: Bu noktada, Linq-to-SQL kullanmaya karşı kesinlikle tavsiye etmem - Entity Framework yerine bunun yerine çok daha iyi bir seçim!
marc_s

Evet öyle. Uygulamanın PLINQO yerine düz bir DBML ile çalışacağını doğruladıktan sonra EF'e geçmek, eski bir uygulamanın tozunu atmak için attığım bir sonraki adımdı.
Yuck

4

Tüm .DBML dosyalarımızdaki her tablo için information_schema modelini dinamik olarak sorgulayan ve .DBML dosyasının bazı bölümlerini veritabanından yeni şema bilgileriyle yazan özel bir yazılı T4 şablonu kullanırız. Ben çokbunun gibi bir çözüm uygulamanızı öneririz - bana çok zaman kazandırdı ve tablolarınızı silmenin ve modelinize yeniden eklemenin aksine derneklerinizi koruyacaksınız. Bu çözümle, şemanız değiştiğinde derleme zamanı hataları alırsınız. Yine de bir sürüm kontrol sistemi kullandığınızdan emin olmak istersiniz, çünkü fark gerçekten kullanışlı. Bu, bir DB şeması ilk yaklaşımı ile geliştiriyorsanız iyi çalışan harika bir çözümdür. Tabii ki, şirketimin kodunu paylaşamıyorum, bu yüzden bunu kendiniz yazmak için tek başınızasınız. Ancak bazı Linq-to-XML biliyorsanız ve bu projede okula gidebiliyorsanız , istediğiniz yere gidebilirsiniz.


2

Ben dbml güncelleme de sizin için oluşturulan kodu güncellediği gibi VS2008 yerleşik görsel tasarımcısı kullanmanızı tavsiye ederim. Görsel tasarımcı dışında dbml değiştirmek, temel kod eşitleme ile sonuçlanır.


4
Evet, ancak VS2008'deki görsel tasarımcı, temel veritabanınızdaki değişiklikleri algılayamaz ve yanıtlayamaz :-( Silme ve yeniden ekleme işleminin kısa olması, modelinizi güncellemek için destek yoktur :-(
marc_s

Bu doğru olsa da, soru çok belirsizdi ve özellikle veritabanı değiştiğinde bir modelin nasıl güncelleneceğinden bahsetmedi.
Jason Miesionczek

2

Tabloları güncellemek ve sonra DBML'yi güncellemek için bir nüans vardır ... Varolan tablolarda değişiklik yapılırsa yabancı anahtar ilişkileri hemen her zaman getirilmez. Çözüm, projenin bir yapısını yapmak ve daha sonra tabloları yeniden eklemek. Bunu MS'ye bildirdim ve VS2010 için sabitlendi.

DBML ekranı yeni yabancı anahtar kısıtlamaları göstermiyor


Ana cevapta verilen talimatların net olmadığını unutmayın. Tabloyu güncellemek için

  1. Dbml tasarım yüzeyini açın
  2. Sağ-> Tıklama-> Tümünü Seç veya CTRLa
  3. CTRLx (Kesmek)
  4. CTRLv (Yapıştırmak)
  5. Çözümü kaydedin ve yeniden oluşturun.

Düzeltildiğine inanmıyorum, çünkü ilgili connect.microsoft.com/VisualStudio/feedback/details/414601/… sabit değil
Michael Freidgeim

Kesip yapıştırmadan önce veya sonra değişikliklerinizi yapıyor musunuz?
Kolob Kanyonu

10 sene oldu ... ama daha önce olduğuna inanıyorum ... değişiklikleri yap ve sonra # 2'ye git.
MmegaMan

1

Saklı yordam güncelleştirmesi durumunda, bu dosyayı .dbml dosyasından silmeli ve yeniden yüklemelisiniz. Ancak, saklı yordamın iki yolu varsa (ör. Bir şey varsa; bazı sütunları görüntüleyin; başka bazı sütunları görüntüleyin), iki yolun aynı sütun takma adlarına sahip olduğundan emin olun !!! Aksi takdirde yalnızca ilk yol sütunları bulunur.


0

İşte LINQ SQL dbml ve ilişkili dosyaları veritabanı tablolarından birine eklediğim yeni bir sütun içerecek şekilde güncelleştirmek için benim için çalışan tam adım adım yöntem.

Yukarıdakilerin önerdiği gibi tasarım yüzeyinizde değişiklik yapmanız gerekir; ancak, fazladan bazı adımlar atmanız gerekir. Bunlar tam adımlardır:

1. Drag your updated table from Server Explorer onto the design surface

2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)

3. Delete the "new" table that you just dragged over

4. Click and highlight the stored procedure, then delete it

5. Drag the new stored procedure and drop into place.

6. Delete the .designer.vb file in the code-behind of the .dbml 
   (if you do not delete this, your code-behind containing the schema will
    not update even if you rebuild and the new table field will not be included)

7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.