9

Tôi đang cố gắng cập nhật cơ sở dữ liệu trên máy chủ xây dựng và không thành công vì nó đang cố gắng di chuyển tự động, mặc dù chúng bị vô hiệu hóa. Cơ sở dữ liệu đã tồn tại và tôi chỉ cần áp dụng di chuyển mới nhất. Dưới đây là bối cảnh của tôi:EF: Tự động di chuyển đang chạy khi bị tắt

public sealed class Configuration : DbMigrationsConfiguration<CableSenseInstanceConfiguratorContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 
} 

Tôi đã có một loạt các file chuyển tôi đã tạo ra bằng tay, đây là một mới nhất:

public partial class Settings : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("dbo.MasterInstances", "Settings", c => c.String()); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.MasterInstances", "Settings"); 
    } 
} 

Nếu tôi sau đó tự cập nhật cơ sở dữ liệu từ người quản lý gói giao diện điều khiển , Tôi thấy nó cố gắng chạy một chuyển đổi tự động (không thành công vì bảng đã tồn tại):

Applying code-based migrations: [201204200805145_NoMoreCerts, 201210311451543_SuperUsers, 201301041036414_Settings, 201301041128583_Settings2]. 
Applying code-based migration: 201204200805145_NoMoreCerts. 
Applying automatic migration: 201204200805145_NoMoreCerts_AutomaticMigration. 

Bảng __MigrationHistory của tôi chỉ có mục nhập ban đầu. Làm thế nào tôi có thể ngăn chặn nó làm việc di chuyển tự động?

Trả lời

5

Kiểm tra ra câu trả lời từ jjslagace đây:

Update-Database tries to do an automatic migration even with automatic migrations disabled

Bạn đang xây dựng di cư của bạn bằng tay. Tôi đoán là khuôn khổ thực thể muốn thêm một cái gì đó mà bạn không có trong kịch bản di trú của bạn, hoặc nó muốn đặt tên cột khác nhau vv EF có một bộ não, và bộ não đó là khá đơn giản. Nó hy vọng mọi thứ là một cách nhất định trừ khi bạn nói bằng cách khác sử dụng lưu loát (không phải bằng cách tạo/chỉnh sửa tệp di chuyển theo cách thủ công). Từ câu trả lời cho câu hỏi trên, có vẻ như đôi khi điều đó dẫn đến vấn đề bạn đang thấy.

Ngắn câu chuyện không xây dựng tệp di chuyển theo cách thủ công. Thay vào đó hãy chạy lệnh thêm di chuyển. Điều này sẽ tạo ra sự chuyển đổi cho bạn và bạn có thể thấy những gì EF mong đợi làm trước khi nó được áp dụng cho cơ sở dữ liệu của bạn (vì đôi khi nó là ngu ngốc). Nếu bạn cần ghi đè lên những gì EF đang tạo cho bạn thêm một ánh xạ thành thạo trong lớp DBContext của bạn bằng cách ghi đè OnModelCreating. Sau đó, chỉ cần chạy lại di chuyển với tùy chọn -force. Here is a good reference for using the Fluent API để giữ lại ánh xạ EF. Rửa sạch và lặp lại cho đến khi bạn nhận được di chuyển bạn đang tìm kiếm sau đó chạy cơ sở dữ liệu cập nhật.

Hy vọng điều đó sẽ hữu ích!

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