在更新数据库期间,ASP.NET MVC初始化程序不会播种数据库

时间:2019-04-09 07:47:36

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 initializer

带标签的重复问题使用自定义上下文,我使用默认的ApplicationDbContext

我很困惑为什么每次运行Update-Database时都不会播种数据。我阅读了其他带有答案的问题,但不幸的是,它们使用的是自定义上下文,我使用的是默认的ApplicationDbContext。他们似乎有相同的答案,但对我而言没有用。

我已经完成了以下工作;

我有一个自定义的Initializer:

public class PostInitializer : DropCreateDatabaseAlways<ApplicationDbContext>
{
        protected override void Seed(ApplicationDbContext db)
        {
            var posts = new List<Post>
            {
                new Post()
                {
                    Content = "TestA"
                },
                new Post()
                {
                    Content = "TestB"
                }
            };

            posts.ForEach(p => db.Posts.Add(p));
            db.SaveChanges();
        }
}

在我的全球Asax中:

public class MvcApplication : System.Web.HttpApplication
{
        protected void Application_Start()
        {
            // call PostInitializer here
            Database.SetInitializer(new PostInitializer());

            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
}

我的模特:

public class Post
{
     [Key]
     public int PostId { get; set; }
     public string Title { get; set; }
     public string Content { get; set; }
     public DateTime? DateTimeCreated { get; set; }
}

我尝试删除数据库并在此之后运行Update-Database,但是仍然没有播种数据。

2 个答案:

答案 0 :(得分:1)

编写您的Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); 如下:

PostInitializer

然后注册如下:

public static class PostInitializer
{
    public static void Seed()
    {
        using (ApplicationDbContext dbContext = new ApplicationDbContext())
        {
            if (dbContext.Database.Exists())
            {
                if(!dbContext.Posts.Any())
                {
                    var posts = new List<Post>
                    {
                        new Post()
                        {
                            Content = "TestA"
                        },
                        new Post()
                        {
                             Content = "TestB"
                        }
                    };

                    posts.ForEach(p => dbContext.Posts.Add(p));
                    dbContext.SaveChanges();
                }
            }
        }
    }
}

答案 1 :(得分:0)

好吧,我不好。解决此问题的方法是运行应用程序。我以为播种会在更新数据库期间发生。这是对我有用的;

  • 运行应用
  • 具有与Initializer有关的模型的访问控制器,至少访问对我有用的“索引”页面(本地主机/帖子)
  • 在访问期间,将删除并创建数据库,然后使用初始化器中指定的内容进行播种
  • 关闭连接到目标数据库的Visual Studio上的所有SQL选项卡,因为它可能在Drop Database期间引发错误