20

Tôi có một mô hình được tạo từ db với Entity Framework. Khi tôi có bất kỳ thay đổi nào trong cơ sở dữ liệu, tôi cập nhật mô hình từ cơ sở dữ liệu để có được sự thay đổi trong mô hình. Nhưng bản cập nhật này được áp dụng cho tất cả các thực thể (bảng) được bao gồm trong mô hình.Làm thế nào để cập nhật chỉ một bảng cho mô hình từ cơ sở dữ liệu với khung thực thể?

Bây giờ tôi thêm một cột mới vào bảng Tab1. Tôi không muốn cập nhật mô hình từ cơ sở dữ liệu như một số thay đổi khác mà tôi không muốn đưa vào mô hình. Tôi có thể thêm thuộc tính mới trong mô hình cho thực thể Tab1 theo cách thủ công. sau đó nó gây ra lỗi lập bản đồ.

Vì vậy, tôi cần phải cập nhật Model.Store cho bảng để bao gồm cột mới. Nó có nghĩa là tôi muốn cập nhật mô hình chỉ cho Tab1.

Tôi làm cách nào để thực hiện việc này?

Trả lời

39

Tệp EDMX là tệp XML là sự kết hợp của 3 phần khác nhau tạo nên toàn bộ nội dung. Nếu bạn nhấp chuột phải vào tập tin EDMX của bạn và chọn "Open with ... XML Editor" bạn sẽ thấy 3 phần khác nhau:

  • <edmx:ConceptualModels>
  • <edmx:StorageModels>
  • <edmx:Mappings>

Các phần này có thể được chỉnh sửa thủ công, có nguy cơ của riêng bạn! :-)
Bằng cách đó bạn chỉ có thể sửa đổi những gì bạn cần. Lưu ý rằng nó cũng có thể tạo các tệp MSL CSDL, SSDL & thay vì để chúng được nhúng vào tệp nhị phân, bằng cách thay đổi thuộc tính "Xử lý tạo tác meta" của mô hình của bạn thành "Sao chép vào thư mục đầu ra".

Nếu bạn không muốn thực hiện việc này theo cách thủ công, có Huagati DBML/EDMX tool, miễn phí và bạn có thể tải xuống từ huagati official site hoặc từ visual studio gallery, là plugin của Visual Studio cho phép bạn chọn những thay đổi cần thực hiện .

+0

cảm ơn bạn. Tôi làm theo cách thủ công. Vì vậy, không có cách nào làm nó tự động như "cập nhật từ cơ sở dữ liệu" cho đối tượng duy nhất. – KentZhou

+2

Cách duy nhất tôi biết là sử dụng điều này: [Huagati DBML/EDMX tool] (http://www.huagati.com/dbmltools/). Nhân tiện, tôi không phải là người tạo ra nó!;-) – MaxSC

+0

Và đừng quên upvote và/hoặc chấp nhận câu trả lời nếu bạn cảm thấy nó rất hữu ích! Cảm ơn ;-) – MaxSC

-14

Có cách thực hiện tự động.

nhấp chuột phải vào tệp edmx> mô hình cập nhật từ cơ sở dữ liệu> tab Làm mới> Bảng> chọn bảng (bạn muốn cập nhật) và nhấn hoàn tất.

+7

Tôi không nghĩ rằng điều này là đúng/Từ những gì tôi có thể nói, nó làm mới mọi thứ trên tab làm mới. Đó là vấn đề ban đầu của OP (và của tôi). –

+2

Điều này không giải quyết được câu hỏi đã đăng và có thể gây hại nhiều hơn khi làm mới toàn bộ mô hình. –

+3

Trong khi giao diện người dùng làm cho nó trông giống như bạn có thể cập nhật chỉ một bảng duy nhất, kết quả là tất cả các bảng được cập nhật. Rất tiếc, câu trả lời này không chính xác. Sẽ tuyệt vời nếu trình chỉnh sửa được cập nhật để hoạt động như được mô tả ở đây. –

5

Tôi sử dụng mẹo sau (Điều kiện). Điều này có thể được thực hiện chỉ khi không có Bảng phụ thuộc vào bảng mà bạn muốn cập nhật.

  1. Xóa bảng cần được cập nhật.
  2. Nhấp chuột phải vào Mô hình và chọn 'Cập nhật mô hình từ cơ sở dữ liệu'. Bảng sẽ được hiển thị trong tab 'Thêm'. Chọn bảng này và Cập nhật mô hình.

Cảnh báo: Nếu các bảng hiện có khác có thay đổi, EF cũng sẽ cập nhật những thay đổi này.

+2

Điều này cập nhật các colums trong các bảng khác cho tôi. – Marshal

+1

Hmm .. EF cũng sẽ cập nhật các cột trong các bảng khác. Không biết cách tránh điều này. :-( –

Các vấn đề liên quan