2013-03-21 41 views
5

Tôi đã tạo một DataBase trong SQL và tạo một EDMX trong Visual Studio 2012. Nó tự động tạo các lớp POCO (TT). Mọi thứ đều ổn.Lớp POCO trong EF không hoạt động như mong đợi

Bây giờ tôi thay đổi tên cột của bảng. Tôi cập nhật EDMX. Mở EDMX trong XML và mọi thứ đều ổn.

Câu hỏi 1

Sau khi tôi chạy công cụ Custom trong TT, tôi thấy rằng một tài sản mới Đã tạo bổ sung, ví dụ:

SQL table name : Student 

Column name : sName 

Trong tôi POCO Lớp

public int sName{ get; set; } 

được tạo tự động.

Bây giờ tôi thay đổi tên cột trong SQL để

Column name : studentName 

lớp POCO My

public int sName{ get; set; } 

public int studentName{ get; set; } 

Đây có phải là một lỗi hay tôi cần phải làm gì đó để sửa lỗi này?

Tôi nên làm gì để tránh điều này?

Câu hỏi 2

Ngoài ra, nếu tôi thay đổi kiểu dữ liệu của bất kỳ cột SQL và cập nhật các mô hình từ DB trong thiết kế EDMX tôi, mô hình khái niệm không được cập nhật. Làm thế nào để tôi đi về điều này?

Trả lời

25

Trước tiên, để hiểu vấn đề của bạn, những gì bạn cần phải biết là file EDMX chỉ là một tập tin XML chứa 3 phần khác nhau:

  • CSDL: schema khái niệm ngôn ngữ định nghĩa
  • SSDL: Lưu trữ định nghĩa schema ngôn ngữ
  • MSL: lập bản đồ đặc tả ngôn ngữ

các CSDL chứa các thực thể và các mối quan hệ tạo nên khái niệm của bạn mô hình. SSDL mô tả mô hình DB của bạn và MSL là ánh xạ giữa 2.

Quy trình “Mô hình cập nhật từ DB” sẽ cập nhật SSDL (thay đổi mọi thứ không phù hợp với lược đồ DB hiện tại), nó sẽ chỉ sửa đổi CSDL trong trường hợp bạn đã thêm những thứ mới vào lược đồ DB của mình. Đây là hành vi khá bình thường vì lược đồ khái niệm của bạn có thể/nên khác với lược đồ DB của bạn (trừ khi bạn muốn mô hình Domain của bạn trông giống hệt như mô hình DB rõ ràng không giống như các phương pháp hay nhất OOP/DDD).

Đối với @Peru, giải pháp sẽ là xóa đối tượng liên quan (không phải toàn bộ EDMX!) Và sau đó thực hiện quy trình “Cập nhật mô hình từ DB”.

Hy vọng điều này sẽ hữu ích!

Edit:

Có một công cụ, không phải miễn phí, mà là một plugin Visual Studio cho phép bạn áp dụng thay đổi được thực vào DB, cả trên CSDL và các tập tin SSDL: Huagati DBML/EDMX Tools. Giải pháp "miễn phí" duy nhất đang xóa thực thể (hoặc trường bên phải trong thực thể này) cần phải được cập nhật.

Hãy nhớ rằng CSDL được cho là được duy trì bởi nhà phát triển và phải giống như Mô hình đối tượng thay vì Mô hình DB. Hãy tưởng tượng bạn đã thiết lập kế thừa giữa các thực thể của bạn hoặc rằng bạn đã chia 1 bảng DB thành 2 thực thể EDMX, chạy "Mô hình cập nhật từ DB" không được ghi đè lên mọi thứ!

+1

Xóa thực thể là giải pháp duy nhất? – Peru

+0

Có một plugin VS hiện có thực hiện công việc. Tôi đã chỉnh sửa câu trả lời của mình. – MaxSC

+0

@ MaxS-Betclic: bạn sẽ cho chúng tôi một ví dụ khi bạn nói 'csdl phải xem xét một mô hình đối tượng chứ không phải là mô hình DB ' –

4

Cá nhân, tôi sẽ mở tệp edmx dưới dạng XML và tìm nút vấn đề và xóa nó. Các tập tin là khá dễ hiểu - đừng sợ hãi để ít nhất là thử nó ra.

0

Chỉ chỉnh sửa thủ công làm việc cho Chế độ xem trong dự án của tôi. (từ smallint sang thập phân (18,2))

Mở tệp .EDMX trong trình chỉnh sửa văn bản, tìm phần appropite và thay đổi giá trị thuộc tính Type "" ... theo cách thủ công.

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