2012-09-26 13 views
7

Giả sử đối tượng của tôi có trường Tên và tôi muốn chia nó thành trường FirstName và LastName. Hoặc có thể nó có một chuỗi địa chỉ và tôi đang thêm các trường Lat và Lng yêu cầu mã hóa địa lý. Ví dụ:Tôi nên viết di chuyển Khung thực thể để chuyển đổi dữ liệu (tốt nhất là sử dụng DbContext) như thế nào?

Tôi dự kiến ​​có quyền truy cập vào DbContext trong các phương thức Up() và Down(), nhưng tất cả những gì tôi có thể tìm thấy (ngoài hàm dựng sẵn) là cuộc gọi .Sql(). Điều này là đủ để thêm và xóa cột, nhưng không phải để chuyển đổi dữ liệu hiện có sang các định dạng mới.

Có an toàn để tham chiếu DbContext của tôi bên trong lời gọi Up() không? Hoặc có một mô hình được đề xuất khác để triển khai các quá trình di chuyển đòi hỏi nhiều hơn SQL tầm thường không?

Trả lời

0

Không, bạn không thể sử dụng DbContext bên trong phương thức Up vì phương thức này đã đề cập đến mô hình mới nhưng cơ sở dữ liệu của bạn vẫn nhắm mục tiêu mô hình cũ.

Chỉnh sửa:

Mọi di chuyển dữ liệu phải được thực hiện thông qua Sql. Ví dụ, bạn có thể tạo bảng tạm thời, di chuyển dữ liệu cũ sang bảng tạm thời, sử dụng di chuyển cấu trúc bảng và di chuyển dữ liệu từ bảng tạm thời về bản gốc bằng cách sử dụng một số phép chuyển đổi trực tiếp trong SQL.

+2

Các biến đổi được yêu cầu của tôi không thể thực hiện được dưới dạng SQL (các biến thể tách là một ví dụ được minh họa hoàn toàn). Loại hoạt động di trú này rất tự nhiên trong một ORM kiểu vịt như ActiveRecord, nhưng nó có ý nghĩa rằng đây là một lĩnh vực mà phương pháp EF sẽ gặp rắc rối. – Seth

0

Thay vì cố gắng chia Tên thành hai trường khác nhau, hãy suy nghĩ lại quá trình di chuyển của bạn. Đôi khi nó có thể được dàn dựng tốt nhất. Tôi có thể nghĩ ra hai cách để thực hiện sự biến đổi của bạn.

Migration con đường # 1: New Fields, sau đó Xóa cũ

  1. Tạo di cư cho lĩnh vực mới cho FirstName và LastName, và trong phương pháp Up(), bạn vẫn có trường Name, chia nó , chèn vào trường Đầu tiên và Cuối cùng.
  2. Tạo một di chuyển khác để xóa trường Tên cũ.

Migration con đường # 2: Repurpose và Đổi tên

  1. Tạo một di chuyển thêm lĩnh vực LastName, và đổi tên Tên để FirstName, di chuyển dữ liệu tên cuối cùng, sửa đổi lĩnh vực Đầu tiên/Name đổi tên thành chỉ giữ tên đầu tiên.

Cả hai đường đều có ưu điểm và nhược điểm. Và bất chấp sự phức tạp của sự biến đổi của bạn, bạn sẽ có thể phá vỡ nó thành các giai đoạn hợp lý để hoàn thành mục tiêu.

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