Tôi đang cố gắng sử dụng Code First with Migrations. Mặc dù không có thay đổi hiện tại cho mô hình của tôi, tôi nhận được một ngoại lệ. Khi tôi thêm một di dân, lên và xuống là trống rỗng, nhưng tôi nhận được một lỗi runtime với thông điệp như sau:Mô hình sao lưu ngữ cảnh 'DataContext' đã thay đổi kể từ khi cơ sở dữ liệu được tạo ra
Một ngoại lệ của loại 'System.InvalidOperationException' xảy ra ở EntityFramework.dll nhưng đã không được xử lý trong mã người dùng
Thông tin bổ sung: Mô hình sao lưu ngữ cảnh 'MyDataContext' đã thay đổi kể từ khi cơ sở dữ liệu được tạo. Xem xét sử dụng Mã Đầu tiên Migrations để cập nhật cơ sở dữ liệu (http://go.microsoft.com/fwlink/
kiến trúc của tôi là như sau:
- dự án DataAccess bao gồm bối cảnh, cấu hình chất lỏng và sự di cư của mã dự án mẫu
- có chứa các lớp poco
- dự án API Web và MVC có chứa chuỗi kết nối trong tệp web.config tương ứng của chúng.
Ngoài ra tôi đã đoạn mã sau:
DbInitializer
public static MyDataContext Create()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDataAccess.MyDataContext, MyDataAccess.Migrations.Configuration>());
return new MyDataContext(ConfigurationManager.ConnectionStrings["MyDataContext"].ConnectionString, null);
}
tôi bắt đầu với AutomaticMigrationsEnabled = false; trong quá trình di chuyển Cấu hình xây dựng, vì tôi hiểu rằng điều này sẽ cho phép (và yêu cầu) tôi có quyền kiểm soát nhiều hơn khi di chuyển được áp dụng. Tôi cũng đã cố gắng thiết lập này thành true nhưng với cùng một kết quả.
Tôi đã thêm di chuyển mới khi nhận được lỗi này và phương thức Up bị trống. Tôi đã cập nhật cơ sở dữ liệu cho quá trình di chuyển mới này và một bản ghi đã được tạo trong bảng _migrationHistory, nhưng tôi vẫn nhận được lỗi khi tôi cố gắng chạy ứng dụng. Ngoài ra, dữ liệu hạt giống không được thêm vào cơ sở dữ liệu.
protected override void Seed(MyDataAccess.MyDataContext context)
{
IdentityResult ir;
var appDbContext = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(appDbContext));
ir = roleManager.Create(new IdentityRole("Admin"));
ir = roleManager.Create(new IdentityRole("Active"));
ir = roleManager.Create(new IdentityRole("InActive"));
var userNamager = new UserManager<User>(new UserStore<User>(appDbContext));
// assign default admin
var admin = new User { UserName = "administrator", Email = "[email protected]" };
ir = userNamager.Create(admin, "[email protected]");
ir = userNamager.AddToRole(admin.Id, "Admin");
}
nơi
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
: base("MyDataContext", throwIfV1Schema: false)
{
}
...
Câu hỏi đặt ra: Nếu Add-Migration không thấy bất kỳ sự thay đổi trong mô hình, tại sao tôi nhận được lỗi này khi tôi chạy? Tại sao mã hạt giống không bị tấn công? Làm thế nào để sửa lỗi này, hoặc nếu không thể xác định được, làm cách nào để xác định thêm nguyên nhân gốc rễ?
Làm việc như say mê! Cảm ơn rất nhiều. Tôi đã bị mắc kẹt trong nhiều ngày và luôn luôn kết thúc nhân bản toàn bộ dự án một lần nữa và xây dựng. Cám ơn bạn một lần nữa! – OhmnioX
vì vậy, bạn có thể cho tôi biết quy trình ... nơi tìm Package Manager Console này không? –
Trong Visual Studio -> Công cụ Menu –