Tôi có một cá thể cục bộ của cơ sở dữ liệu mà gần đây tôi đã tạo bằng cách sử dụng DbContext.Database.Create()
, vì vậy bảng __MigrationHistory
tồn tại với mục nhập InitalCreate
khớp với mã tại thời điểm này.Làm cho di chuyển đầu tiên của mã EF4.3 bỏ qua việc di chuyển đang chờ xử lý
Tuy nhiên, một số di chuyển dựa trên mã có trong thư mục Di chuyển. Chúng sẽ được chạy trong các môi trường phát triển và dàn dựng của chúng tôi để đưa các cơ sở dữ liệu đó phù hợp với mã. Tôi không cần phải áp dụng chúng cục bộ, tuy nhiên, kể từ khi tôi tạo ra cơ sở dữ liệu bằng cách sử dụng mã hiện tại.
Tôi bây giờ cần thực hiện thay đổi đối với mô hình và tạo di chuyển tương ứng. Nhưng khi tôi chạy Add-Migration TestMigration
, tôi nhận được lỗi sau
Unable to generate an explicit migration because the following explicit
migrations are pending:
[201203271113060_AddTableX,
201203290856574_AlterColumnY]
Apply the pending explicit migrations before attempting to generate
a new explicit migration.
Tôi nên làm gì trong trường hợp này? Tôi không thể chỉ công cụ Add-Migration ở môi trường khác bởi vì nó không đảm bảo rằng phiên bản phù hợp với những gì tôi có tại địa phương. Tôi muốn di chuyển chỉ khớp với những thay đổi tôi đã thực hiện.
Dường như tôi có một vài lựa chọn nhưng không ai là lý tưởng:
- Xóa di cư khác từ thư mục Migrations, hãy chạy lệnh Add-Migration, nâng cấp cơ sở dữ liệu, sau đó khôi phục lại di cư cũ. Điều này là đơn giản nhưng có vẻ hơi hackish.
- Hoàn nguyên về phiên bản của mô hình trong điều khiển nguồn mà lần di chuyển đầu tiên được áp dụng, sau đó tạo và sử dụng nó để tạo cơ sở dữ liệu. Sau đó lấy phiên bản mới nhất, áp dụng tất cả các di chuyển, sau đó tôi đã sẵn sàng để thêm di chuyển của mình. Điều này có vẻ như rất nhiều nỗ lực!
- Tạo di chuyển theo cách thủ công.
Có ai có bất kỳ đề xuất nào về cách quản lý điều này không?
Điều này không hoạt động vì các thao tác di chuyển trước đó không thể chạy trên cơ sở dữ liệu đã được tạo bằng cách sử dụng 'DbContext.Database.Create()'. Hãy tưởng tượng một di chuyển bổ sung thêm một cột, nhưng trong cơ sở dữ liệu cục bộ mới của bạn, bạn đã có cột đó để bạn nhận được một 'SqlException' và hàng liên quan không bao giờ được thêm vào bảng' __MigrationHistory'. Xem câu trả lời của tôi cho những gì tôi nghĩ là cách tiếp cận chính xác. –