2012-06-24 13 views
6

Khi tôi thêm một bảng mới có một số quan hệ với cơ sở dữ liệu của tôi và sau đó chạy Add-Migration Tôi thấy mã đó được tạo trong phương thức Up để thêm bảng và các mối quan hệ của nó. Tuy nhiên, tôi muốn xác định mối quan hệ bằng cách sử dụng API thông thạo theo phương pháp OnModelCreating. Hai phương thức này tương tác như thế nào? Tôi có thể xóa mã từ phương thức Up xác định quan hệ chẳng hạn?Làm thế nào để di chuyển OnModelCreating và không tự động liên quan?

Trả lời

11

Mỗi trong số họ có mục đích hoàn toàn khác nhau:

  • OnModelCreating được sử dụng cho các định nghĩa inline thạo-API của mô hình của bạn. Các định nghĩa này cùng với các quy ước mặc định, chú thích dữ liệu và các lớp cấu hình tạo thành định nghĩa hoàn chỉnh của mô hình.
  • di cư Explicit xác định những gì cần phải được thực hiện để cơ sở dữ liệu để di chuyển nó vào mẫu theo yêu cầu của mô hình hiện tại của bạn

Bây giờ, làm thế nào hai liên quan? Di chuyển có hai đầu vào được sử dụng để tạo mã di chuyển (các phương thức UpDown). Một đầu vào là bản ghi di chuyển cuối cùng được lưu trữ trong bảng __MigrationHistory trong cơ sở dữ liệu. Bản ghi này chứa mô hình tuần tự đại diện cho cơ sở dữ liệu. Dữ liệu nhập này là tùy chọn vì di chuyển đầu tiên phải hoạt động mà không có nó. Đầu vào thứ hai là bắt buộc - đó là mô hình hiện tại của bạn được truy xuất bằng cách thực thi mã trong assembly hiện tại =>Add-Migration của bạn sẽ thực hiện OnModelCreating để lấy mô hình hiện tại và so sánh nó với mô hình được lấy từ cơ sở dữ liệu. Kết quả so sánh là nội dung của các phương pháp UpDown trong quá trình di chuyển rõ ràng.

+1

Cảm ơn! Vì vậy, nếu tôi hiểu chính xác mã trong phương thức 'Up' sẽ phản ánh các định nghĩa được đặt trong phương thức' OnModelCreating' (giả sử rằng bạn đã thêm một Migration sau khi viết định nghĩa API thông thạo). Người ta phải * không * loại bỏ các định nghĩa được phản ánh này khỏi 'Up'. – Dabblernl

+0

Đúng vậy. –