【发布时间】:2015-03-21 01:06:40
【问题描述】:
我正在学习有关 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 迁移?
【问题讨论】:
-
您实际上是在哪里调用会进行数据库调用的方法?您的模型只有在第一次被访问时才会被创建。
-
我在 HomeController 中添加了为此目的实例化 SchoolContext 数据库的构造函数。我实际上在完全工作的 EF 教程示例中设置了相同的断点,它在相同的确切点(构造函数)命中数据库,然后触发 OnModelCreating 事件。
标签: asp.net-mvc entity-framework entity-framework-6