我进行了广泛的搜索,浏览了教程和技巧,但它不起作用!
EF 5 code-first 不会生成我的 SQL Server CE 4 数据库文件。
我有一个 ASP.NET Web 应用程序,我想使用代码优先的方法生成一个数据库。
这是我的模型类:
public class Class
{
[Key]
public int id { get; set; }
public bool isLecture { get; set; }
public int courseId { get; set; }
public virtual Course course { get; set; }
public int teacherId { get; set; }
public virtual Teacher teacher { get; set; }
}
public class Course
{
[Key]
public int id { get; set; }
public string name { get; set; }
public int semester { get; set; }
}
public class Teacher
{
public int id { get; set; }
public string name { get; set; }
public string lastName { get; set; }
}
这是上下文:
public class MyContext : DbContext
{
public DbSet<Class> Classes { get; set; }
public DbSet<Teacher> Teachers { get; set; }
public DbSet<Course> Courses { get; set; }
}
这是 中的连接字符串web.config
:
<add name="MyContext"
connectionString="Data Source=|DataDirectory|\MyContext.sdf"
providerName="System.Data.SqlServerCe.4.0" />
这是在global.asax.cs
:
protected void Application_Start()
{
Database.SetInitializer<MyContext>
(new DropCreateDatabaseIfModelChanges<MyContext>());
...
}
我已经尝试了 w/ 和 w/o 这些行,global.asax.cs
并且 w/ 和 w/o 连接字符串。
应用程序加载并工作,但只是没有创建数据库文件。我尝试.sdf
自己创建文件,因此它可以由 EF 代码先填充,但它仍然是空的。
该项目是用 HotTowel 模板制作的 ASP.NET MVC 4,如果它意味着什么,我正在使用 Visual Studio 2012。
解决了:
需要此代码global.asax.cs
:
MyContext context = new MyContext();
context.Database.Initialize(true);