我有一个对象类:
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的记录(标题为“我的主题”),它没有插入我的数据库,索引也没有创建!有什么问题?
答案 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调用后更新本地(在内存实体中)。