Câu trả lời:
Có ba cách để giữ cho mô hình đồng bộ.
Xóa các bảng đã sửa đổi khỏi trình thiết kế và kéo chúng trở lại bề mặt trình thiết kế từ Database Explorer. Tôi đã thấy rằng, để điều này hoạt động đáng tin cậy, bạn phải:
a. Làm mới lược đồ cơ sở dữ liệu trong Database Explorer (nhấp chuột phải, làm mới)
b. Lưu người thiết kế sau khi xóa các bảng
c. Lưu lại sau khi kéo các bảng trở lại.
Lưu ý rằng nếu bạn đã sửa đổi bất kỳ thuộc tính nào (ví dụ: tắt thuộc tính con của liên kết), điều này rõ ràng sẽ mất các sửa đổi đó - bạn sẽ phải thực hiện lại chúng.
Sử dụng SQLMetal để tạo lại lược đồ từ cơ sở dữ liệu của bạn. Tôi đã thấy một số bài viết trên blog chỉ ra cách viết kịch bản này .
Thay đổi trực tiếp trong ngăn Thuộc tính của DBML. Điều này hoạt động cho các thay đổi đơn giản, như cho phép null trên một trường.
Trình thiết kế DBML không được cài đặt theo mặc định trong Visual Studio 2015, 2017 hoặc 2019. Bạn sẽ phải đóng VS, khởi động trình cài đặt VS và sửa đổi cài đặt của bạn. Các công cụ LINQ to SQL là tính năng bạn phải cài đặt. Đối với VS 2017/2019, bạn có thể tìm thấy nó trong Các thành phần riêng lẻ> Công cụ mã .
Để cập nhật một bảng trong sơ đồ .dbml của bạn, ví dụ, các cột đã thêm, hãy làm điều này:
Bạn cũng có thể kiểm tra bộ mẫu tạo mã PLINQO , dựa trên CodeSmith, cho phép bạn thực hiện nhiều việc gọn gàng cho và với Linq-to-SQL:
Kiểm tra trang web PLINQO tại http://www.plinqo.com và xem các video giới thiệu.
Công cụ thứ hai mà tôi biết là các công cụ Huagati DBML / EDMX , cho phép cập nhật các tệp ánh xạ DBML (Linq-to-SQL) và EDMX (Entity Framework), và nhiều hơn nữa (như quy ước đặt tên, v.v.).
Marc
Chúng tôi sử dụng mẫu T4 được viết tùy chỉnh, truy vấn động mô hình information_schema cho mỗi bảng trong tất cả các tệp .DBML của chúng tôi, sau đó ghi đè lên các phần của tệp .DBML bằng thông tin lược đồ mới từ cơ sở dữ liệu. Tôi đánh giá caokhuyên bạn nên thực hiện một giải pháp như thế này - nó đã giúp tôi tiết kiệm rất nhiều thời gian, và không giống như xóa và thêm lại các bảng của bạn vào mô hình của bạn, bạn có thể giữ các liên kết của mình. Với giải pháp này, bạn sẽ gặp lỗi thời gian biên dịch khi lược đồ của bạn thay đổi. Bạn muốn chắc chắn rằng bạn đang sử dụng một hệ thống kiểm soát phiên bản, bởi vì diffing thực sự tiện dụng. Đây là một giải pháp tuyệt vời hoạt động tốt nếu bạn đang phát triển với cách tiếp cận lược đồ DB đầu tiên. Tất nhiên, tôi không thể chia sẻ mã của công ty tôi để bạn tự mình viết mã này. Nhưng nếu bạn biết một số Linq-to-XML và có thể đi học trong dự án này , bạn có thể đến nơi bạn muốn.
Tôi khuyên bạn nên sử dụng trình thiết kế trực quan được tích hợp trong VS2008, vì cập nhật dbml cũng cập nhật mã được tạo cho bạn. Sửa đổi dbml bên ngoài trình thiết kế trực quan sẽ dẫn đến mã bên dưới không đồng bộ.
Có một sắc thái đối với việc cập nhật các bảng sau đó cập nhật DBML ... Các mối quan hệ khóa ngoài không phải luôn luôn được đưa ra nếu các thay đổi được thực hiện cho các bảng hiện có. Công việc xung quanh là thực hiện xây dựng dự án và sau đó thêm lại các bảng. Tôi đã báo cáo điều này với MS và nó đã được sửa cho VS2010.
Hiển thị DBML không hiển thị các ràng buộc khóa ngoại mới
Lưu ý rằng các hướng dẫn được đưa ra trong câu trả lời chính là không rõ ràng. Để cập nhật bảng
Trong trường hợp cập nhật thủ tục được lưu trữ, bạn nên xóa nó khỏi tệp .dbml và đặt lại lần nữa. Nhưng nếu thủ tục được lưu trữ có hai đường dẫn (ví dụ: if Something; hiển thị một số cột; khác hiển thị một số cột khác), hãy đảm bảo hai đường dẫn có cùng một bí danh cột !!! Nếu không, chỉ có các cột đường dẫn đầu tiên sẽ tồn tại.
Đây là phương pháp từng bước hoàn chỉnh phù hợp với tôi để cập nhật LINQ thành SQL dbml và các tệp được liên kết để bao gồm một cột mới mà tôi đã thêm vào một trong các bảng cơ sở dữ liệu.
Bạn cần thực hiện các thay đổi cho bề mặt thiết kế của bạn theo đề xuất khác ở trên; tuy nhiên, bạn cần phải làm thêm một số bước. Đây là các bước hoàn chỉnh:
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!).