在实体框架中覆盖种子方法

时间:2014-01-28 14:44:22

标签: c# entity-framework entity-framework-5

我有一个对象类:

 public  class Post
  {
     public int Id { get; set; }
     public string Title { get; set; }
     public string Content { get; set; }
  }

我实现了一个类来重写Seed方法,如下所示:

 public class MyCustomInitialize : DropCreateDatabaseIfModelChanges<Context>
{
    protected override void Seed(Context context)
    {
        context.Posts.Add(new Post() { Content = "This is a test", Id = 2, Title = "my subject" });
        context.Database.ExecuteSqlCommand("CREATE INDEX IX_title ON Blog (title)");
        base.Seed(context);
    }
}

并在Program.cs中:

 Database.SetInitializer(new  MyCustomInitialize());

但是当我运行我的程序时,我想要添加到我的DataBase的记录(标题为“我的主题”),它没有插入我的数据库,索引也没有创建!有什么问题?

2 个答案:

答案 0 :(得分:0)

您需要在DbContext上调用SaveChanges。

答案 1 :(得分:0)

SetInitializer调用应该在Application_Start()事件中的global.asax中。

protected void Application_Start()
{
    System.Data.Entity.Database.SetInitializer(new MyCustomInitialize());
}
编辑:正如amarano在答案中所说,数据库尚未使用新的“Post”进行更新,因为您尚未调用SaveChanges ...

这让我想知道你是如何检查索引是否已被应用?

你也应该致电

Context.Entry(TheTrackedEntityYouWantToUpdate).Reload();

在ExecuteSqlCommand调用后更新本地(在内存实体中)。