我在MVC中使用CodeFirst方法。我有填写表格的代码,
db.Categories.Add(new CategoryViewModel { Title = "Metal" });
db.Categories.Add(new CategoryViewModel { Title = "Pop" }); //etc
是否有一些地方我可以将此代码填入应用程序启动时的表格中?而不是在多次调用的控制器中。
答案 0 :(得分:1)
您可以创建自定义数据库初始值设定项并覆盖Seed
方法,以便对表执行自定义记录插入。
创建一个继承自DropCreateDatabaseIfModelChanges
public class MyNiceInitializer : DropCreateDatabaseIfModelChanges<MyDbContext>
{
protected override void Seed(MyDbContext context)
{
var categoryList= new List<Category>();
categoryList.Add(new Category() { Title= "Metal"});
categoryList.Add(new Category() { Title= "Pop" });
foreach (var category in categoryList)
context.Categories.Add(category);
base.Seed(context);
}
}
现在,在您的DbContext类中,将我们创建的这个新自定义初始值设定项的新实例传递给Database.SetInitializer
method。
public class MyDbContext : DbContext
{
public MyDbContext() : base("YourEFConnStringName")
{
Database.SetInitializer<MyDbContext>(new MyNiceInitializer());
}
public DbSet<Category> Categories { set; get; }
//Other Items goes here...
}
当您第一次运行应用程序并访问Dbcontext的任何DbSet属性时,EF将执行您的自定义初始化程序的种子方法,我们将插入一些记录。每次运行应用程序/页面时都不会发生这种情况。
由于我们继承自DropCreateDataBaseIfModelChanges
,因此每次更改模型(类)以及重新创建数据库时都会发生播种。