Tạo tập lệnh SQL đầy đủ từ các lần di chuyển đầu tiên của mã 5 của mã 5


144

Làm cách nào để sử dụng Entity Framework 5 Di chuyển lần đầu tiên để tạo tập lệnh cơ sở dữ liệu đầy đủ từ trạng thái ban đầu (trống) sang lần di chuyển mới nhất?

Bài đăng blog tại Blog MSDN gợi ý để làm điều này, nhưng dường như nó tạo ra một tập lệnh trống:

Update-Database -Script -SourceMigration: $InitialDatabase

Câu trả lời:


285

API dường như đã thay đổi (hoặc ít nhất, nó không hoạt động đối với tôi).

Chạy phần sau trong Bảng điều khiển quản lý gói hoạt động như mong đợi:

Update-Database -Script -SourceMigration:0

13
Tôi nhận ra đây là câu trả lời đúng, nhưng làm thế nào bạn phát hiện ra rằng 0 hoạt động khi tham số thường là một chuỗi?!
Dave R

26
Chỉ cần dùng thử và lỗi thực sự sau khi thử mọi thứ tôi có thể nghĩ ra để lừa nó hoạt động :)
Matt Wilson

1
Điều này có tạo ra một bản sao chính xác của cơ sở dữ liệu không? Bao gồm các nội dung bảng?
Multitut 20/03/2015

2
@Multitut: không, nó sẽ chỉ làm cấu trúc.
Martin Clarke

6
Chỉ trong trường hợp ai đó đang tìm cách làm điều này trong EfCore và kết thúc ở đây như tôi, lệnh là : dotnet ef migrations script. Thông tin thêm về tài liệu: docs.microsoft.com/en-us/ef/core/managing-schemas/migations/
Rafael Miceli

13

Đối với bất cứ ai sử dụng lõi khung thực thể kết thúc ở đây. Đây là cách bạn làm điều đó.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Bạn có thể sử dụng tham số -From-Tođể tạo tập lệnh cập nhật để cập nhật cơ sở dữ liệu lên phiên bản cụ thể.

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migations/#generate-sql-scripts

Có một số tùy chọn cho lệnh này.

Các từ di cư nên di chuyển gần nhất áp dụng cho các cơ sở dữ liệu trước khi chạy kịch bản. Nếu không có di chuyển đã được áp dụng, chỉ định 0(đây là mặc định).

Các để di cư là sự di cư cuối cùng sẽ được áp dụng cho các cơ sở dữ liệu sau khi chạy kịch bản. Điều này mặc định cho lần di chuyển cuối cùng trong dự án của bạn.

Một kịch bản idempotent có thể tùy chọn được tạo ra. Tập lệnh này chỉ áp dụng di chuyển nếu chúng chưa được áp dụng cho cơ sở dữ liệu. Điều này hữu ích nếu bạn không biết chính xác lần di chuyển cuối cùng được áp dụng cho cơ sở dữ liệu là gì hoặc nếu bạn đang triển khai đến nhiều cơ sở dữ liệu mà mỗi cơ sở có thể ở một lần di chuyển khác nhau.


Điều này hoạt động đến một điểm. Khi bạn bắt đầu thay đổi tên cột, nó sẽ bắt đầu ném lỗi, tạo DacPac là một giải pháp tốt hơn. Đặc biệt là khi bạn bắt đầu sử dụng Pipelines trong CI / CD
Nick Turner

8

Để thêm vào câu trả lời của Matt wilson, tôi đã có một loạt các lớp thực thể đầu tiên mã nhưng không có cơ sở dữ liệu vì tôi đã không sao lưu. Vì vậy, tôi đã làm như sau trong dự án Entity Framework của mình:

Mở bảng điều khiển Trình quản lý gói trong Visual Studio và nhập như sau:

Enable-Migrations

Add-Migration

Đặt tên di chuyển của bạn như 'Ban đầu' và sau đó tạo di chuyển. Cuối cùng gõ như sau:

Update-Database

Update-Database -Script -SourceMigration:0

Lệnh cuối cùng sẽ tạo các bảng cơ sở dữ liệu của bạn từ các lớp thực thể của bạn (miễn là các lớp thực thể của bạn được hình thành tốt).

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.