Tôi gặp sự cố khi nhận phương thức Seed được gọi trên bộ khởi tạo cơ sở dữ liệu tùy chỉnh của mình. Tôi đang sử dụng EF 5.0 và có mã sau:DropCreateDatabaseAlways Seed không được gọi là
public static class MyDatabase
{
public static void Initialize()
{
Database.SetInitializer(new MyInitializer());
}
}
public class MyInitializer : DropCreateDatabaseAlways<MyContext>
{
protected override void Seed(MyContext context)
{
base.Seed(context);
context.Roles.Add(new Role
{
ID = 1,
Name = "User",
});
context.Roles.Add(new Role
{
ID = 2,
Name = "Admin",
});
context.SaveChanges();
}
}
Hai lớp này tồn tại trong thư viện lớp riêng biệt từ ứng dụng MVC. Trong Global.asax
, tôi gọi là Initialize()
phương pháp:
MyDatabase.Initialize();
Cơ sở dữ liệu được tạo ra chỉ tốt, nó chỉ là phương pháp Seed(MyContext context)
không được gọi và không có dữ liệu được đưa vào cơ sở dữ liệu của tôi.
Hết sức tò mò, điều gì sẽ xảy ra nếu bạn đặt cơ sở.Phải vào cuối phương thức? – IronMan84
Điều tương tự, nó không được gọi. Tôi đặt một breakpoint vào bối cảnh.Roles.Add và nó không bao giờ phá vỡ. Nó sẽ có bất cứ điều gì để làm với initializer đang ở trong một thư viện lớp khác nhau và không phải trong dự án web chính nó? Tôi nghĩ tôi đã thực hiện nó theo cách này trước đây, nhưng không thể nhớ cụ thể. –
Có thể. Nó cũng có thể là bạn đã đặt mọi thứ trong một lớp tĩnh. – IronMan84