Bagaimana cara saya memperbarui file Linq ke SQL dbml?

204

Bagaimana cara saya memperbarui file Linq ke SQL .dbml?

Sokongan
sumber

Jawaban:

258

Ada tiga cara untuk menjaga model tetap sinkron.

  1. Hapus tabel yang dimodifikasi dari desainer, dan seret kembali ke permukaan desainer dari Database Explorer. Saya telah menemukan bahwa, agar ini dapat bekerja dengan andal, Anda harus:

    Sebuah. Refresh skema database di Database Explorer (klik kanan, segarkan)
    b. Simpan desainer setelah menghapus tabel
    c. Simpan lagi setelah menyeret tabel kembali.

    Perhatikan bahwa jika Anda telah memodifikasi properti apa pun (misalnya, mematikan properti anak asosiasi), ini jelas akan kehilangan modifikasi tersebut - Anda harus membuatnya lagi.

  2. Gunakan SQLMetal untuk membuat ulang skema dari database Anda. Saya telah melihat sejumlah posting blog yang menunjukkan cara skrip ini .

  3. Lakukan perubahan secara langsung di panel Properties pada DBML. Ini berfungsi untuk perubahan sederhana, seperti mengizinkan nol pada bidang.

Perancang DBML tidak diinstal secara default di Visual Studio 2015, 2017 atau 2019. Anda harus menutup VS, memulai pemasang VS dan memodifikasi instalasi Anda. Alat LINQ to SQL adalah fitur yang harus Anda instal. Untuk VS 2017/2019, Anda dapat menemukannya di Individual Components> Code Tools .

Robert Harvey
sumber
1
Saya telah mencoba 1a dan 1c tanpa 1b dan mendapatkan kesalahan 'Specified cast is valid' ketika melakukan pemilihan sederhana pada tampilan. Termasuk 1b memperbaikinya untuk saya
tomfumb
6
Dukungan VS diminta pada connect.microsoft.com/VisualStudio/feedback/details/260723/... , tapi MS tidak ingin memperbaiki.
Michael Freidgeim
Mencoba metode pertama dan berhasil. Kira itu akan bekerja untuk DB kecil.
Muhammedh
Sangat menyakitkan saya bahwa pada akhir tahun 2019, saya membutuhkan jawaban yang dibuat sebelum saya tahu apa pemrograman komputer itu ... Ini sangat rinci dan hebat!
PSGuy
54

Untuk memperbarui tabel di .dbml-diagram Anda dengan, misalnya, kolom tambahan, lakukan ini:

  1. Perbarui jendela SQL Server Explorer Anda.
  2. Seret versi "baru" dari tabel Anda ke dalam diagram .dbml (report1 pada gambar di bawah).

report1 adalah versi baru dari tabel

  1. Tandai kolom yang ditambahkan di versi tabel yang baru, tekan Ctrl+ Cuntuk menyalin kolom yang ditambahkan.

salin kolom yang ditambahkan

  1. Klik versi "lama" dari tabel Anda dan tekan Ctrl+ Vuntuk menempelkan kolom yang ditambahkan ke versi tabel yang sudah ada.

rekatkan kolom yang ditambahkan ke versi tabel yang lama

M463
sumber
4
Ini tampaknya menjadi metode termudah, paling tidak destruktif yang tidak memerlukan alat tambahan dan berfungsi dengan baik di VS2017
Toby
1
Ini jauh lebih tidak mengganggu daripada jawaban yang diterima dan terus bekerja dengan baik pada akhir 2018!
Tandai
1
Ini adalah jawaban terbaik untuk pengeditan cepat (dan tidak terlalu cepat untuk skema). Saya telah mengambil banyak waktu untuk membuat tampilan model terlihat bagus. Saya benci menghapus dan menyeret file pembaruan. Untuk bidang yang ditambahkan ini berfungsi dengan baik!
Hucker
1
Bagi saya, ini menyelesaikan dua masalah. Yang pertama adalah ketika saya mencoba untuk menyalin dan menempel bidang serupa di dalam tabel dan kemudian mengganti namanya. Kesalahan build yang dibuat tanpa henti "tidak ditentukan" saat memvalidasi. Masalah lainnya adalah bahwa jika saya menghapus tabel dan kemudian menambahkannya kembali secara keseluruhan, itu menghasilkan perbedaan git yang jauh lebih besar (karena objek disusun ulang di dalam file). Dengan metode ini, saya hanya melihat penyisipan bidang baru, yang jauh lebih bersih dan lebih mudah dipahami nanti.
Harus
BTW, perlu mengklik "Ya" ketika diminta Anda dengan "Objek yang Anda tambahkan ke desainer menggunakan koneksi data yang berbeda dari desainer ..."
Eitanmg
5

Anda juga bisa memeriksa set templat pembuatan kode PLINQO , berdasarkan CodeSmith, yang memungkinkan Anda melakukan banyak hal rapi untuk dan dengan Linq-to-SQL:

  • menghasilkan satu file per kelas (bukan satu file besar)
  • perbarui model Anda sesuai kebutuhan
  • banyak fitur lainnya

Lihatlah situs PLINQO di http://www.plinqo.com dan lihat video intro.

Alat kedua yang saya ketahui adalah alat Huagati DBML / EDMX , yang memungkinkan pembaruan file pemetaan DBML (Linq-to-SQL) dan EDMX (Entity Framework), dan banyak lagi (seperti konvensi penamaan, dll.).

Marc

marc_s
sumber
Baru saja merobek CodeSmith / PLINQO saya sangat menyarankan untuk tidak mengambil pendekatan ini. Diberikan jawaban ini lebih dari 4 tahun ...
Yuck
@Yuck: pada saat ini, saya akan sangat menyarankan agar tidak menggunakan Linq-to-SQL sama sekali - sebagai gantinya gunakan Entity Framework, pilihan yang jauh lebih baik!
marc_s
Ya itu. Pindah ke EF setelah memverifikasi bahwa aplikasi tersebut akan berfungsi dengan DBML biasa dan bukan PLINQO adalah langkah berikutnya yang saya lakukan untuk membersihkan aplikasi yang lama.
Yuck
4

Kami menggunakan templat T4 tertulis khusus yang secara dinamis menanyakan model information_schema untuk setiap tabel di semua file .DBML kami, dan kemudian menimpa bagian dari file .DBML dengan info skema baru dari database. Saya sangatmerekomendasikan menerapkan solusi seperti ini - ini telah menghemat waktu saya, dan tidak seperti menghapus dan menambahkan kembali tabel Anda ke model Anda, Anda bisa menjaga asosiasi Anda. Dengan solusi ini, Anda akan mendapatkan kesalahan waktu kompilasi ketika skema Anda berubah. Anda ingin memastikan bahwa Anda menggunakan sistem kontrol versi, karena perbedaan sangat berguna. Ini adalah solusi hebat yang bekerja dengan baik jika Anda mengembangkan dengan pendekatan DB skema pertama. Tentu saja, saya tidak bisa membagikan kode perusahaan saya sehingga Anda sendiri untuk menulis ini sendiri. Tetapi jika Anda tahu beberapa Linq-to-XML dan dapat pergi ke sekolah pada proyek ini , Anda bisa sampai ke tempat yang Anda inginkan.

mattmc3
sumber
2

Saya akan merekomendasikan menggunakan perancang visual yang dibangun ke dalam VS2008, karena memperbarui dbml juga memperbarui kode yang dihasilkan untuk Anda. Memodifikasi dbml di luar perancang visual akan mengakibatkan kode yang mendasari tidak sinkron.

Jason Miesionczek
sumber
4
Ya, tetapi perancang visual di VS2008 tidak dapat mendeteksi dan menanggapi perubahan dalam basis data Anda :-( Pendek menghapus dan menambahkan kembali, tidak ada dukungan untuk memperbarui model Anda :-(
marc_s
Meskipun itu benar, pertanyaannya sangat kabur dan tidak secara spesifik menyebutkan cara memperbarui model ketika perubahan database.
Jason Miesionczek
2

Ada nuansa untuk memperbarui tabel kemudian memperbarui DBML ... Hubungan kunci asing tidak selalu segera dibawa jika ada perubahan pada tabel yang ada. Pekerjaan di sekitar adalah untuk membangun proyek dan kemudian menambahkan kembali tabel. Saya melaporkan ini ke MS dan sedang diperbaiki untuk VS2010.

Tampilan DBML tidak menunjukkan batasan kunci asing baru


Perhatikan bahwa instruksi yang diberikan dalam jawaban utama tidak jelas. Untuk memperbarui tabel

  1. Buka permukaan desain dbml
  2. Pilih semua tabel dengan Kanan-> Klik-> Pilih Semua atau CTRLa
  3. CTRLx (Memotong)
  4. CTRLv (Tempel)
  5. Simpan dan bangun kembali solusi.
GamegaMan
sumber
Saya tidak percaya itu sudah diperbaiki, karena connect.microsoft.com/VisualStudio/feedback/details/414601/… terkait tidak diperbaiki
Michael Freidgeim
Apakah Anda melakukan perubahan sebelum atau setelah Anda memotong dan menempel?
Ngarai Kolob
Sudah 10 tahun ... tapi saya percaya itu sebelum ... lakukan perubahan lalu lanjutkan ke # 2.
ΩmegaMan
1

Dalam kasus pembaruan prosedur tersimpan, Anda harus menghapusnya dari file .dbml dan masukkan kembali. Tetapi jika prosedur yang tersimpan memiliki dua jalur (mis: jika sesuatu; tampilkan beberapa kolom; lainnya tampilkan beberapa kolom lainnya), pastikan kedua jalur tersebut memiliki alias kolom yang sama !!! Kalau tidak, hanya kolom jalur pertama yang akan ada.

Yasser Hosny Abu Elmakarem
sumber
0

Berikut ini adalah metode langkah demi langkah lengkap yang bekerja untuk saya untuk memperbarui LINQ ke SQL dbml dan file terkait untuk memasukkan kolom baru yang saya tambahkan ke salah satu tabel database.

Anda perlu membuat perubahan pada permukaan desain Anda seperti yang disarankan oleh yang lain di atas; Namun, Anda perlu melakukan beberapa langkah tambahan. Ini adalah langkah-langkah lengkapnya:

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!).
Jeff
sumber