2012-09-09 38 views
15

Tôi làm việc cho một nhóm gồm 4 nhà phát triển sử dụng EF5, mọi người làm việc trên cơ sở dữ liệu cục bộ của họ. Cho đến bây giờ, chúng tôi đã sử dụng tính năng di chuyển tự động nhưng chúng tôi đang đến gần nơi chúng tôi cần phát hành để sản xuất, vì vậy, chúng tôi đã vô hiệu hóa việc di chuyển tự động và bắt đầu thêm các lần di chuyển dựa trên mã rõ ràng.Update-Database cố gắng thực hiện di chuyển tự động ngay cả khi tự động di chuyển bị vô hiệu hóa

Đây là vấn đề: Tôi chạy lệnh Update-Database sau khi một nhà phát triển tạo ra một sự chuyển đổi rõ ràng mới và tôi nhận được lỗi sau:

Applying code-based migrations: [201209080142319_CreatedDate.LastModifiedDate.Additions]. 
Applying code-based migration: 201209080142319_CreatedDate.LastModifiedDate.Additions. 
Applying automatic migration: 201209080142319_CreatedDate.LastModifiedDate.Additions_AutomaticMigration. 
Automatic migration was not applied because it would result in data loss. 

Tại sao tôi nhận được lỗi này mặc dù tôi đã di cư tự động khuyết tật ? Tôi có thể sửa lỗi này bằng cách xóa di chuyển rõ ràng và sau đó tái dàn dựng nó (chạy Add-Migration). Sau đó, Update-Database chạy tốt và không đề cập đến bất kỳ điều gì về 'Tự động di chuyển ...' Ngoài ra, mã trong quá trình di chuyển do tôi tạo khi tôi chạy Add-Migration giống với mã được tạo bởi đồng đội của tôi. Tôi không thấy lý do tại sao nó thậm chí sẽ cố gắng thực hiện di chuyển tự động kể từ AutomaticMigrationsEnabled = false;.

Tôi thiếu gì ở đây?

Trả lời

20

Tôi ghét trả lời câu hỏi của riêng mình nhưng tôi lại gặp sự cố này. Một nhà phát triển trong nhóm của tôi đã bật lại tính năng di chuyển tự động trên máy cục bộ của họ và sau đó tạo một di chuyển rõ ràng, tái tạo hành vi này ngay sau khi tôi chạy nó.

khung Entity sẽ luôn chạy một di chuyển tự động trước khi nó chạy một di trú rõ ràng rằng có Source tài sản quy định trong tập tin .resx của nó, ngay cả khi AutomaticMigrationsEnabled = false. Di chuyển rõ ràng sẽ chỉ có thuộc tính Source được đặt nếu được tạo sau khi quá trình di chuyển tự động được chạy.

Kết quả là tắt di chuyển tự động chỉ có nghĩa là EF sẽ không tự động nâng cấp giản đồ của bạn khi phát hiện thay đổi mô hình - nhưng nó vẫn có thể thực hiện di chuyển tự động nếu cần lấp đầy khoảng cách giữa một số di chuyển rõ ràng. Để tránh hành vi này, không sử dụng hỗn hợp di chuyển tự động và di chuyển rõ ràng.

1

AutomaticMigrationEnabled = false ngăn ứng dụng của bạn tự cập nhật cơ sở dữ liệu.

Nhưng kể từ khi bạn chạy Update-database, Update-Database kiểm tra trạng thái hiện tại của cơ sở dữ liệu và sau đó chạy tất cả các bước di chuyển chưa có trong cơ sở dữ liệu. dựa trên di chuyển được nêu ra.

Tôi đoán là có sự thay đổi trong mô hình có thể gây mất dữ liệu.

Bạn có thể sử dụng tham số -force để áp dụng các thay đổi vẫn còn khi có mất dữ liệu.

0

Nhóm của tôi đã trải nghiệm điều gì đó có thể liên quan đến vấn đề này. Nếu cả hai thành viên trong nhóm đều thêm di chuyển, hãy kiểm tra mã của họ, nhận mới nhất, sau đó thực hiện cập nhật cơ sở dữ liệu, thứ hai sẽ gặp lỗi vì có di chuyển "bị bỏ qua" - hệ thống của họ thấy việc di chuyển thành viên của nhóm chưa bao giờ được triển khai .

Chúng tôi đã bắt đầu kiểm tra mọi thứ và nhận mới nhất, làm cơ sở dữ liệu cập nhật (nếu thành viên nhóm thêm di chuyển mới), sau đó thực hiện thêm di chuyển, cập nhật cơ sở dữ liệu, đăng ký.

3
public class Configuration : DbMigrationsConfiguration<bailencasino.com.dal.Context.BlncnoContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = true; 
    } 

Thêm AutomaticMigrationDataLossAllowed = true; vì vậy bạn cho rằng bạn muốn cho phép EF để thêm đối tượng remove SQL mà dẫn đến việc mất dữ liệu.

+9

Câu hỏi này là về EF áp dụng di chuyển tự động ngay cả khi chúng bị vô hiệu hóa rõ ràng. Tôi không bao giờ muốn di chuyển tự động chạy và tôi đặc biệt không muốn EF tự động mất dữ liệu của mình. –

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