Jawaban:
Ada tiga cara untuk menjaga model tetap sinkron.
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.
Gunakan SQLMetal untuk membuat ulang skema dari database Anda. Saya telah melihat sejumlah posting blog yang menunjukkan cara skrip ini .
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 .
Untuk memperbarui tabel di .dbml-diagram Anda dengan, misalnya, kolom tambahan, lakukan ini:
Anda juga bisa memeriksa set templat pembuatan kode PLINQO , berdasarkan CodeSmith, yang memungkinkan Anda melakukan banyak hal rapi untuk dan dengan Linq-to-SQL:
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
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.
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.
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
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.
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!).