Cách tốt nhất để cập nhật các lớp LINQ thành SQL sau khi thay đổi lược đồ cơ sở dữ liệu


76

Tôi đang sử dụng các lớp LINQ to SQL trong một dự án mà thiết kế cơ sở dữ liệu vẫn còn một chút thay đổi.

Có cách nào dễ dàng để đồng bộ hóa các lớp với lược đồ hay tôi cần cập nhật các lớp theo cách thủ công nếu thiết kế bảng thay đổi?


Câu trả lời:


65

Bạn có thể sử dụng SQLMetal.exe để tạo tệp dbml và hoặc cs / vb của mình. Sử dụng một tập lệnh xây dựng trước để khởi động nó và nhắm mục tiêu đến thư mục chứa dự án văn bản dữ liệu của bạn.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>

Điều đó thật tuyệt! Tôi nghĩ rằng tôi chỉ cần phải sắp xếp lại mọi thứ vào dbml.
naspinski 19-08

14
tiếc là không có tùy chọn để chỉ lọc các bảng /
mầm

Tôi đã tạo một tiện ích để giúp lọc. Nó cho phép bạn chọn các bảng bạn muốn loại trừ và cũng để chọn các bảng mà bạn muốn cập nhật bất cứ khi nào cho các cột không phải pk. Hãy cho tôi biết nếu có ai muốn mã nguồn.
vzczc

17

Bản thân tôi chưa thử nhưng Công cụ Huagati DBML / EDMX được những người khác khuyên dùng.

Huagati DBML / EDMX Tools là phần bổ trợ cho Visual Studio bổ sung chức năng cho trình thiết kế sơ đồ Linq2SQL / DBML trong Visual Studio 2008 và trình thiết kế ADO.NET Entity Framework trong Visual Studio 2008 SP1. Phần bổ trợ bổ sung thêm các tùy chọn menu mới để cập nhật sơ đồ trình thiết kế Linq2SQL với các thay đổi cơ sở dữ liệu, để đổi tên các lớp và thuộc tính Linq-to-SQL (DBML) và EF (EDMX) để sử dụng quy ước đặt tên .net và để thêm tài liệu / mô tả vào Linq -to-SQL tạo ra các lớp từ các thuộc tính cơ sở dữ liệu.

Ảnh chụp màn hình của Công cụ DBML


FYI - có sẵn 30 bản dùng thử miễn phí tại trang web đó và một khoản phí cấp phép người dùng duy nhất chỉ hơn 100 đô la.
Dan Esparza

Sửa chữa, $ 199 và dùng thử với các tính năng hạn chế. Không chắc là nó đáng giá.
Levitikon

8

Đây là một bản sửa lỗi dễ dàng mà không cần bất kỳ phần mềm bổ sung nào, chỉ hoạt động đối với những thay đổi đơn giản (như trường được thêm, một vài bảng, v.v.).

Hướng dẫn:

  • Bạn kéo một bản sao của bảng đã thay đổi vào trình thiết kế (sẽ bị xóa sau này)
  • Bây giờ hãy chọn tất cả các trường mới (hoặc đã thay đổi) và ( right-click ->)copy
  • Trong bảng ban đầu của bạn, nhấp chuột phải và insertchúng (xóa các trường đã thay đổi trước)
  • Bây giờ hãy xóa bảng bạn đã sao chép chúng

Tôi biết điều đó khá hiển nhiên, nhưng bằng cách nào đó không trực quan, và nó đã giúp tôi rất nhiều, vì tất cả các thuộc tính và loại phù hợp sẽ được sao chép và tất cả các liên kết vẫn nguyên vẹn. Hy vọng nó giúp.

Khi nào sử dụng:

Tất nhiên là - như đã nói - đối với những thay đổi nhỏ, nhưng chắc chắn tốt hơn là thay thế thủ công các bảng có nhiều liên kết hoặc khi bạn không muốn toàn bộ cấu trúc cơ sở dữ liệu của mình được tạo bởi SQLMetal. Ví dụ: khi bạn có một lượng lớn bảng (ví dụ: SAP) hoặc khi sử dụng các bảng được liên kết chéo từ các cơ sở dữ liệu khác nhau.


5

DamienG đã viết một số mẫu t4 có thể thay thế một số mẫu mà VS tạo ra cho bạn. Chúng có thể được chạy lại bất cứ khi nào bạn muốn thông qua một công cụ dòng lệnh.

Các mẫu T4 có thêm lợi ích là có thể chỉnh sửa. Điều này cho phép bạn điều chỉnh những gì được tạo cho bạn nội dung trái tim.


4

Tôi nghĩ Jeff đã phàn nàn về điều này gần đây. Một kỹ thuật phổ biến là kéo lại tất cả các đối tượng vào trình thiết kế ...

Tôi hy vọng có người khác sẽ gọi đến với cách tiếp cận tốt hơn!


Đây là những gì chúng tôi đang làm ... và nó bắt đầu rất khó chịu! :-)
Richard Ev


0

Làm thế nào về việc sửa đổi Thuộc tính của thực thể / bảng trong bề mặt thiết kế DataContext trong Visual Studio?

Ví dụ: nếu tôi đã thêm một cột vào bảng SQL Server:

  1. Mở tệp * .dbml.
  2. Nhấp chuột phải vào thực thể và chọn Thêm> Thuộc tính.
  3. Điền vào các giá trị trong cửa sổ Thuộc tính cho cột mới.
  4. Xây dựng giải pháp của bạn.

Các lớp mô hình được tạo tự động phải phản ánh cột mới đã được thêm vào.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.