Tôi có thể tạo tập lệnh di chuyển với mã EF trước và lõi .net không


83

Tôi đang xây dựng một ứng dụng MVC với .Net Core và tôi cần tạo tập lệnh của quá trình di chuyển.

Với EF6, tôi đã chạy lệnh

update-database -script

nhưng khi tôi cố gắng làm điều tương tự với .net Core sẽ đưa ra ngoại lệ tiếp theo:

Cập nhật-Cơ sở dữ liệu: Không thể tìm thấy một tham số khớp với tên tham số 'script'

Bạn có biết nếu có một tương đương cho EF Core?

Câu trả lời:


123

Theo tài liệu EF, bạn có thể sử dụng Script-Migrationlệnh.

Nếu bạn chỉ muốn tập lệnh cho tất cả các lần di chuyển, bạn có thể chỉ cần gọi nó từ bảng điều khiển Trình quản lý gói như vậy. Nếu bạn chỉ muốn viết kịch bản các thay đổi từ lần di chuyển cuối cùng, bạn có thể gọi nó như sau:

Script-Migration -From <PreviousMigration> -To <LastMigration>

Hãy nhớ kiểm tra tài liệu, có một số tùy chọn khác cho lệnh.


1
Công cụ di chuyển tập lệnh dường như không hoạt động đối với việc hạ cấp (khi di chuyển Tới cũ hơn di chuyển Từ). Bất kỳ ý tưởng nào về cách tạo tập lệnh 'hoàn tác'?
Nullius

1
@Nullius bạn không muốn gọi nó, hoặc nhìn thấy nó giống như một "undoScript" của mình, bạn chỉ cần thực hiện undo bạn trên mã của bạn và sau đó cập nhật Db và nhận được kịch bản mới nhất ...
Haithem Karoui

1
Chúng tôi có một máy chủ triển khai cũng quản lý db-migrations. Ví dụ: khi triển khai được khôi phục, cơ sở dữ liệu cũng phải được hạ cấp xuống trạng thái trước đó. Bước xây dựng quản lý db-migrations, cần một tập lệnh 'up' và 'down'. Chúng tôi đã phát hiện ra rằng tập lệnh di chuyển cũng hoạt động khi chỉ định di chuyển Đến cũ hơn so với di chuyển Từ. Tuy nhiên, người ta nên đặt To di chuyển thành TRƯỚC khi di chuyển mà bạn thực sự muốn di chuyển. Ngoài ra, khi cố gắng tạo tập lệnh 'xuống' cho lần di chuyển mới nhất, người ta nên sử dụng 'ZZZZZZ' (hoặc tương tự) cho tham số Từ di chuyển.
Nullius

2
Điều gì sẽ xảy ra nếu tôi đang cố tạo tập lệnh cho lần di chuyển đầu tiên . Không có
Di chuyển

2
@tchelidze Để kịch bản di chuyển ban đầu, thiết lập các tham số để -Từ 0. ví dụ như Script-Migration -Từ 0
TallMcPaul

19

Bạn có thể sử dụng cli dotnet core để tạo script

dotnet ef migrations script 

Ngoài ra, bạn có thể đưa nó vào tệp bằng out-filelệnh power shell mới .

dotnet ef migrations script | out-file ./script.sql

1
Mẹo hay trong CMD: dotnet ef migrations script> script.sql
Tore Aurstad

11
dotnet ef migrations script --help

Usage: dotnet ef migrations script [arguments] [options]

Arguments:
  <FROM>  The starting migration. Defaults to '0' (the initial database).
  <TO>    The ending migration. Defaults to the last migration.

Options:
  -o|--output <FILE>                     The file to write the result to.
  -i|--idempotent                        Generate a script that can be used on a database at any migration.
  -c|--context <DBCONTEXT>               The DbContext to use.
  -p|--project <PROJECT>                 The project to use.
  -s|--startup-project <PROJECT>         The startup project to use.
  --framework <FRAMEWORK>                The target framework.
  --configuration <CONFIGURATION>        The configuration to use.
  --runtime <RUNTIME_IDENTIFIER>         The runtime to use.
  --msbuildprojectextensionspath <PATH>  The MSBuild project extensions path. Defaults to "obj".
  --no-build                             Don't build the project. Only use this when the build is up-to-date.
  -h|--help                              Show help information
  -v|--verbose                           Show verbose output.
  --no-color                             Don't colorize output.
  --prefix-output                        Prefix output with level.

vì vậy, bạn có thể thử

dotnet ef migrations script ver1 ver2
dotnet ef migrations script ver1 ver2 -o ./script.sql

Điều này hoạt động trong .Net Core 2.1


10

Bạn cũng có thể tạo một tập lệnh để khôi phục quá trình di chuyển bằng cách đảo ngược các tham số thành Script-Migration. Ví dụ: nếu bạn có hai lần di chuyển, BadLatestMigration và GoodPreviousMigration, bạn có thể hoàn nguyên về GoodPreviousMigration bằng cách sử dụng lệnh sau

Script-Migration BadLatestMigration GoodPreviousMigration 

Sau đó, hãy nhớ Xóa-Di chuyển để loại bỏ quá trình di chuyển kém

Remove-Migration

Điều này hoạt động trong .Net Core 2.2.0


Tôi đang tìm kiếm sự quay trở lại và điều này đã giải quyết nó cho tôi. hoạt động trong EF Core 3.0
Sehab

5

Điều này cũng chỉ tạo ra SQL

Update-Database -script -TargetMigration TO -SourceMigration FROM

6
Điều này đúng cho EF5, tôi không nghĩ rằng nó sẽ làm việc trên EF6 hoặc EF lõi
Yuval Perelman
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.