[英]Override Seed method in Entity Framework
我有一个对象Class:
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());
但是,当我运行程序时,要添加到数据库中的记录(标题为“我的主题”)没有插入数据库,索引也没有创建! 问题是什么?
您需要在DbContext上调用SaveChanges。
SetInitializer调用应位于Application_Start()事件中的global.asax中。
protected void Application_Start()
{
System.Data.Entity.Database.SetInitializer(new MyCustomInitialize());
}
编辑:正如amarano在他们的回答中所说,数据库尚未使用新的“ Post”进行更新,因为您尚未调用SaveChanges ...
这使我想知道您如何检查索引是否已应用?
你也应该打电话
Context.Entry(TheTrackedEntityYouWantToUpdate).Reload();
在ExecuteSqlCommand调用之后更新本地(在内存实体中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.