升级到MVC 4后,永远不会调用Code First Database Initializer

时间:2012-04-09 14:58:29

标签: database asp.net-mvc data-access-layer code-first

今天早上我有一个奇怪的问题。

我跟着这个turotial:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application ...

...关于如何在项目中首先实现代码。我在2周前做了同样的教程,一切都很好。从那时起,我做了一些更改并升级到MVC 4,现在Code First已停止工作。

我尝试了相同的教程,与之前在MVC3 Web应用程序中执行的完全相同的步骤,删除数据库,重新重新创建它,以及“种子”方法或DAL中的“OnModelCreating”不似乎再被召唤了。

我有我的Database.SetInitializer(新的AppInitializer());在我调用的Application_Start()中,但之后没有任何反应。

有人知道为什么这可能会突然停止工作? MVC4?

谢谢!

4 个答案:

答案 0 :(得分:2)

当上下文发生变化时,您可以删除数据库并手动创建它,如果您使用EF Code First方法,我不相信您想要这样做,或者您可以使用您所说的调用{{1}你的应用程序开始的方法。

Database.SetInitializer()

至于protected void Application_Start() { DbDatabase.SetInitializer(new DropCreateDatabaseIfModelChanges<MyApp.Models.MyContext>()); // ... } 方法,我就是这样做的

Seed()

完成后,您可以更改public class MyContextInitializer : DropCreateDatabaseIfModelChanges <MyApp.Models.MyContext> { protected override void Seed(MyApp.Models.MyContext context) { base.Seed(context); context.Tags.Add(new Tag { Name = ".NET", Description = "Microsoft's .NET language related" }); context.SaveChanges(); } } 方法调用,如下所示:

DbDatabase.SetInitializer()

请注意,您可以使用您的类,只要它实现protected void Application_Start() { DbDatabase.SetInitializer(new MyContextInitializer()); // ... }

关于SQL Server的最后一件事是确保您没有与提供程序建立任何打开的连接,因为它无法删除数据库。

答案 1 :(得分:2)

可能发生的是您第一次运行该应用程序而未调用Database.SetInitializer(...)。此时创建了数据库。但是,由于您未对模型数据库进行任何更改,因此无需创建或初始化 - 不会调用INITIALIZER上的override void Seed(...)方法。

尝试在模型中进行一些虚拟更改,并检查它是否有效。

请注意,首次访问数据上下文时会调用override void OnModelCreating(...)。因此,当您的主页无法访问数据库时,您应手动导航到同一页面。

答案 2 :(得分:1)

当我创建一个新的MVC4项目时,我遇到了同样的问题。结果是因为InitializeSimpleMembershipAttribute调用Database.SetInitializer<UsersContext>(null);。查看项目中不属于您自己的InitializeSimpleMembershipAttribute的其他电话......

答案 3 :(得分:0)

您是否尝试将工作的MVC 3项目转换为MVC 4 / Beta,或者您是否创建了新的MVC 4 / Beta项目并按照教程进行操作?对于MVC 4 Beta Intro to ASP.NET MVCIntro to ASP.NET MVC 4 Beta with Visual Studio 11 Beta我从零开始。你必须做一些调试才能看出你做错了什么,MVC 4 / Beta不会破坏EF。我希望在2012年7月4日左右将Tom的优秀EF / MVC教程更新到MVC 4