我無法弄清楚爲什麼我的初始化程序不起作用。我正在使用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