2012-04-10 24 views
11

Tôi vừa cài đặt Entity Framework Migrations, thêm thuộc tính vào một lớp và cho EF Migrations một xoáy.Lấy kịch bản lệnh chuyển đổi khung thực thể ban đầu

Cơ sở dữ liệu phát triển của tôi đã được cập nhật kịp thời. Càng xa càng tốt.

Bây giờ, tôi muốn tạo tập lệnh thay đổi cho việc sử dụng Di chuyển ban đầu này cho cơ sở dữ liệu sản xuất. Lưu ý rằng có một cơ sở dữ liệu đã tồn tại từ trước vì tôi đã áp dụng nó cho một dự án hiện có.

Di cư qua tôi đã bao gồm:

PM> Get-Migrations 
Retrieving migrations that have been applied to the target database. 
201204102238194_AutomaticMigration 
201203310233324_InitialCreate 
PM> 

tôi nghĩ rằng tôi có thể nhận được một kịch bản đồng bằng cách sử dụng sau đây:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration -script 

Tuy nhiên, đó mang lại cho tôi những lỗi:

'201204102238194_AutomaticMigration' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them.

Chỉ để xem điều gì sẽ xảy ra, tôi đã đảo ngược hai tham số (di chuyển ngược) và đã nhận được kịch bản lệnh wou ld mong đợi sau khi thêm cờ -force (các cột mới bị giảm).

Tôi làm cách nào để có được tập lệnh cho lần di chuyển đầu tiên này?

+0

Bạn nhận được di chuyển ban đầu như thế nào? Việc di chuyển tự động của bạn nên chứa tạo tập lệnh cho toàn bộ cơ sở dữ liệu mà không phải là những gì bạn muốn - thực thi tập lệnh như vậy trên các kết quả cơ sở dữ liệu hiện có trong nhiều lỗi. Bạn có thể thử [phương pháp này] (http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database) thay thế không? –

+0

@Ladislav: Tôi không thực sự cần một tập lệnh cho toàn bộ cơ sở dữ liệu vì toàn bộ cơ sở dữ liệu (ban đầu) của tôi đã được sản xuất. Những gì tôi không thể tìm ra là làm thế nào để đi từ cơ sở dữ liệu đầu tiên đã có trong sản xuất, trước khi có sử dụng Migrations, để cập nhật đầu tiên của tôi. Tôi chắc chắn rằng Migrations có lược đồ DB ban đầu của tôi ở đâu đó vì việc đảo ngược tham số SourceMigration và TargetMigration cùng với * -force * tạo ra một kịch bản để DROP các cột mới của tôi. Tôi chỉ không thể làm cho nó đi từ cơ sở dữ liệu ban đầu đến lần lặp mới đầu tiên (thêm vài cột đó). –

Trả lời

14

Cách đúng để bắt đầu sử dụng di chuyển EF với cơ sở dữ liệu hiện có là bắt đầu bằng cách thêm di chuyển trống chứa siêu dữ liệu của cơ sở dữ liệu hiện tại.

Tôi nghĩ rằng bạn phải quay trở lại mô hình tương thích với giản đồ cơ sở dữ liệu ban đầu. Sau đó, chạy lệnh sau:

add-migration InitialSchema -IgnoreChanges 

Điều đó sẽ cung cấp cho bạn di chuyển ban đầu, không có gì, nhưng chứa siêu dữ liệu của mô hình hiện tại. Tất nhiên, bạn có thể thêm di chuyển sau với -IgnoreChanges nếu bạn đã mở rộng mô hình mã của mình để bao gồm nhiều bảng đã có trong cơ sở dữ liệu.

Khi bạn đã thực hiện bước di chuyển ban đầu đó, tập lệnh sẽ hoạt động.

Nói chung tôi sẽ không khuyên bạn nên sử dụng di chuyển tự động trừ khi bạn chỉ có ý định chỉ sử dụng di chuyển tự động. Nếu bạn muốn một số loại kiểm soát các thay đổi đối với cơ sở dữ liệu (bao gồm cả kịch bản chúng) thì việc di chuyển dựa trên mã là cách.

Các vấn đề liên quan