Họ không cung cấp cách để thực hiện việc này cho đến RTM, tại thời điểm đó họ đã hứa ứng dụng dòng lệnh và nhà cung cấp dịch vụ msdeploy. Nguồn: http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx
Tất nhiên không được thỏa mãn với điều đó, lệnh PowerShell được lưu trữ trong thư mục gói và là văn bản đơn giản, nó xuất hiện để chỉ tải lên một lắp ráp gọi EntityFramework.Migrations.Commands lưu trữ trong cùng thư mục.
Tracing qua lắp ráp mà tôi đã đưa ra những điều sau
public class MyContext : DbContext
{
static MyContext()
{
DbMigrationsConfiguration configuration = new DbMigrationsConfiguration() {
MigrationsAssembly = typeof(MyContext).Assembly,
ContextType = typeof(MyContext),
AutomaticMigrationsEnabled = true,
};
DbMigrator dbMigrator = new DbMigrator(configuration);
dbMigrator.Update(null);
}
}
UPDATE: sau một chút thử nghiệm tôi đã tìm ra một vài điều hơn
- Thực hiện một bản cập nhật trong constructor tĩnh cho bạn bối cảnh là xấu vì nó phá vỡ các lệnh powershell, tốt hơn hết việc thêm mã để khởi động ứng dụng theo cách khác (Global.asax, WebActivator hoặc phương pháp chính)
- Mã trên chỉ hoạt động khi sử dụng AutomaticMi grations, bạn cần phải đặt MigrationsNamespace cho nó để lấy các di chuyển được tạo thủ công
- Lớp cấu hình mà tôi tạo đã tồn tại trong dự án của bạn (được thêm vào khi bạn cài đặt gói di trú), vì vậy chỉ cần khởi tạo thay thế.
Có nghĩa là mã được đơn giản hóa để
DbMigrator dbMigrator = new DbMigrator(new NAMESPACE.TO.MIGRATIONS.Configuration());
dbMigrator.Update(null);
Xin lưu ý rằng hiện tại đã lỗi thời, RTM của EF 4.3 chứa bộ khởi tạo cơ sở dữ liệu mới có tên là MigrateDatabaseToLatestVersion. Xem http://stackoverflow.com/questions/9281423/entity-framework-4-3-run-migrations-at-application-start để biết thêm thông tin. – Betty
Mặc dù thiết lập bộ khởi tạo trong hàm tạo ngữ cảnh dường như can thiệp vào các kịch bản lệnh PowerShell. Tôi đã hoàn nguyên về việc sử dụng mô-đun app_start với mã ở trên. – Betty