我无法弄清楚为什么我的初始化程序不起作用。我正在使用EF Code First创建数据库,并且我希望使用初始化方法在数据库创建时使用默认值填充数据库。但每当我尝试时,我的数据库正在创建,但初始化程序不起作用,并且表中没有数据,我想用一些默认值进行初始化。我错过了什么吗?如果我错了,那么使用初始化器的正确方法是什么?
注意:我不想使用Configuration.cs为我的数据库播种,我想使用我的自定义初始值设定项。
DataContext.cs
带EF代码优先的数据库初始化程序
namespace WebApplication1.Data.Context
{
public class DataContext : DbContext
{
public DataContext() : base("name=MyDB")
{
Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>());
}
public DbSet<Category> Categories { get; set; }
}
}
CategoryInitializer.cs
namespace WebApplication1.Data.Initializers
{
public class CategoryInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{
protected override void Seed(DataContext context)
{
GetCategories().ForEach(c => context.Categories.Add(c));
context.SaveChanges();
base.Seed(context);
}
private static List<Category> GetCategories()
{
var categories = new List<Category>
{
new Category {CategoryID = 1, CategoryName = "Category 1" },
new Category {CategoryID = 2, CategoryName = "Category 2"},
new Category {CategoryID = 3, CategoryName = "Category 3"}
};
return categories;
}
}
}
Category.cs
namespace WebApplication1.Data.Model
{
public class Category
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
}
你正在设置一个标准的初始值设定项而不是你自己,它应该是'Database.SetInitializer(新的CategoryInitializer());' –
我也是这样做的,但是不工作。 –
您在'SetInitializer'语句后缺少'Database.Initialize(true);'。 ;-) – LocEngineer