Entity Framework - Bắt đầu lại - Hoàn tác / Phục hồi tất cả các di chuyển


168

Vì một số lý do, việc di chuyển của tôi dường như bị xáo trộn / hỏng / bất cứ điều gì. Tôi đang ở điểm mà tôi chỉ muốn bắt đầu lại, vậy có cách nào để hoàn tác tất cả các lần di chuyển, xóa lịch sử và xóa mã di chuyển, vì vậy tôi sẽ quay lại quảng trường?

ví dụ) PM> Disable-MigrationshoặcRollback-Migrations

Tôi không muốn "cập nhật" cho bước di chuyển ban đầu (nghĩa là một cái gì đó giống như InitialSchemamục tiêu) bởi vì tôi không thể tìm thấy nó nữa.

Câu trả lời:


357

Bạn có thể quay trở lại bất kỳ di chuyển bằng cách sử dụng:

Update-Database -TargetMigration:"MigrationName"

Nếu bạn muốn khôi phục tất cả các lần di chuyển, bạn có thể sử dụng:

Update-Database -TargetMigration:0

hoặc tương đương:

Update-Database -TargetMigration:$InitialDatabase 

Trong một số trường hợp, bạn cũng có thể xóa cơ sở dữ liệu và tất cả các lớp di chuyển.


6
như thường lệ, bạn là người giỏi nhất.
drzaus

2
Tôi không hiểu, OP đặc biệt nói "Tôi không muốn" cập nhật "cho bước di chuyển ban đầu (tức là một cái gì đó giống như mục tiêu của FirstSchema) vì tôi không thể tìm thấy nó nữa." Làm thế nào để câu trả lời này làm những gì anh ấy muốn? Điều tôi mong đợi đã xảy ra là tôi sẽ ở trạng thái mà tôi phải enable-migrationstrở lại. Đây rõ ràng là hữu ích, nhưng họ có thực hiện được những gì OP đang yêu cầu không? (Xin đừng trả lời với "tốt, anh ấy đã chấp nhận câu trả lời." Tôi đang cố gắng để hiểu điều này, không phải là một người thông minh).
Michael Blackburn

@MichaelBlackburn: Nếu bạn muốn chạy enable-migrationslại và bạn đang phát triển cơ sở dữ liệu từ đầu, bạn chỉ cần làm theo câu cuối cùng: xóa cơ sở dữ liệu và tất cả các mã liên quan đến di chuyển. Nếu bạn bắt đầu sử dụng di chuyển với cơ sở dữ liệu hiện tại, trước tiên bạn phải hoàn nguyên tất cả các lần di chuyển bằng cách sử dụng lệnh thứ hai hoặc thứ ba, sau đó xóa MigrationHistorybảng và tất cả mã liên quan đến di chuyển. Nó sẽ đưa bạn đến vị trí bắt đầu. Bạn cũng có thể bắt đầu cơ sở dữ liệu từ bản sao lưu (trước khi sử dụng di chuyển) và xóa tất cả các mã liên quan đến di chuyển.
Ladislav Mrnka

4
@MichaelBlackburn: ý tôi là tất cả các giải pháp khác tôi thấy đều bảo bạn cập nhật lại lần di chuyển được đặt tên đầu tiên của bạn , nhưng vấn đề của tôi là không có di chuyển sạch ban đầu để cập nhật (trở lại) muốn thoát khỏi tất cả các cuộc di cư, bất kể phương pháp nào. Vì vậy, câu trả lời này đã giải quyết mối quan tâm của tôi với-TargetMigration:0
drzaus


8

Để rõ ràng, nếu sử dụng LocalDb, khi bạn muốn bắt đầu từ đầu, chỉ cần xóa cơ sở dữ liệu qua Database Explorer và sau đó nhập enable-migrations -forcevào Bảng điều khiển quản lý gói. Không xóa cơ sở dữ liệu qua thư mục App_Data nếu không bạn sẽ gặp vấn đề sau .


2
Hãy cẩn thận khi thực hiện việc này vì nó sẽ ghi đè Di chuyển \ Cấu hình.cs của bạn mà không có cảnh báo!
cgatian

Cảm ơn vì đã cảnh báo, sau một thời gian, tôi đã loại bỏ mã khá nhiều, thật tuyệt khi có tất cả mã của bạn ngay lập tức, có phiên bản kiểm soát nguồn cho cơ sở dữ liệu của bạn nhưng tôi không thấy bất kỳ lợi ích lớn nào khác và chuyển trở lại cơ sở dữ liệu đầu tiên. Tôi sử dụng Red Gate Sql So sánh để theo dõi tất cả các vùng đồng bằng.
Brian Ogden


0

Nó được viết sai trong tài liệu của họ, tôi đoán, đối với tôi, tôi đã sử dụng

Update-Database -Target MigrationName
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.