我在这里有这种“神秘”的问题。 我目前正在使用实体框架4.1代码优先的方法与我的ASP.NET MVC 3应用程序,它工作得很好,直到昨天...实体框架Database.SetInitializer根本不工作
发生了一件非常糟糕的事情,导致我的Database.SetInitializer停止工作。 解释:
我有这个简单的模型
public class User
{
public int Id { get; set; }
public int RoleId { get; set; }
[Required]
[StringLength(50)]
[DataType(DataType.Text)]
public string Login { get; set; }
[Required]
[StringLength(150)]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
[Required]
[StringLength(32)]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.DateTime)]
public DateTime RegisteredDate { get; set; }
public virtual Role Role { get; set; }
}
这里是我的DbContext
public class MyContext : DbContext
{
public DbSet<Models.User> Users { get; set; }
}
而且我设置的自定义初始化(测试)
public class MyInitializer
: DropCreateDatabaseIfModelChanges<MyContext>
{
}
现在我已经在Web.config中设置连接字符串(名称与MyContext相同) 所以在Global.asax中我打电话的Application_Start这个简单的代码()方法
Database.SetInitializer(new MyInitializer());
但问题是,Database.SetInitializer不会产生任何数据库,甚至更糟的是,它也甚至没有试图填补现有的数据库从上下文表... 我试图调试,但它似乎是应用程序只是跳过数据库的初始化代码...
我找到了一个解决办法,就是用这行代码
var ctx = new MyContext();
ctx.Database.Initialize(true);
所以在这里,我只是强制代码来创建DB无论如何...
但事实Database.SetInitializer不会工作真的很烦人......它以前工作得很好,我不知道发生了什么事。 我看着Windows事件日记,SQL服务器日志...但没有任何东西。只是沉默。 但也许我只是看错了地方? :S
有人可以告诉我发生了什么事吗?
P.S我使用的Visual Web Developer 2010 + SQL Server Express的2008 R2
是的,它的工作....谢谢。我真的忘了所有那些“懒加载”的东西。 :) – geCoder 2011-06-16 08:00:56