EF6 OnModelCreating()事件没有

时间:2015-03-21 01:06:41

标签: asp.net-mvc entity-framework entity-framework-6

我正在关注EF6和Codefirst的本教程。 http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

我启动了一个解决方案并添加了模型,上下文和初始化程序

namespace TestContoso.DAL
{
    public class SchoolContext : DbContext
    {
        public SchoolContext()
            : base("Name=SchoolContextDB")
        {

        }

        public DbSet<Student> Students { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Course> Courses { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }
}

并创建了一个虚拟的Home Controller和Index视图。

namespace TestContoso.Controllers
    {
        public class HomeController : Controller
        {
            private SchoolContext db = new SchoolContext();
            //
            // GET: /Home/
            public ActionResult Index()
            {
                return View();
            }
        }
    }

我还设置了连接字符串并在web.config中设置了初始化程序

  <entityFramework>
    <contexts>
      <context type="TestContoso.DAL.SchoolContext, TestContoso">
        <databaseInitializer type="TestContoso.DAL.SchoolInit, TestContoso"/>
      </context>
    </contexts>

当我运行解决方案时,我的期望是数据库将被创建,但是我注意到OnModelCreating事件永远不会触发,因此永远不会创建数据库。为什么不创建数据库?我将如何导致Code First迁移?

2 个答案:

答案 0 :(得分:0)

这篇文章为您提供了另一种选择。尝试通过代码添加初始化策略的替代方法,看看是否有效。

  

作为在Web.config文件中设置初始化程序的替代方法是在代码中通过向Global.asax.cs文件中的Application_Start方法添加Database.SetInitializer语句来执行此操作。

Database.SetInitializer(new CreateDatabaseIfNotExists<SchoolContext>());

并在评论中指定。对数据运行查询或按照“设置EF以使用测试数据初始化数据库”部分自动为数据库设定种子。

答案 1 :(得分:0)

当有一些查询查询该模型时,OnModelCreating事件似乎只被触发,以测试我刚刚在Index控制器中添加了一个虚拟查询并且它有效。

    public class HomeController : Controller
    {
        private SchoolContext db = new SchoolContext();
        //
        // GET: /Home/
        public ActionResult Index()
        {
            var students = from s in db.Students
                               select s;

            return View();
        }
    }
}