MVC在启动时填写表

时间:2015-11-27 21:49:53

标签: c# asp.net-mvc

我在MVC中使用CodeFirst方法。我有填写表格的代码,

db.Categories.Add(new CategoryViewModel { Title = "Metal" });
db.Categories.Add(new CategoryViewModel { Title = "Pop" }); //etc

是否有一些地方我可以将此代码填入应用程序启动时的表格中?而不是在多次调用的控制器中。

1 个答案:

答案 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,因此每次更改模型(类)以及重新创建数据库时都会发生播种。