微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server-2008 – 实体框架Database.SetInitializer根本不工作

在这里遇到这样的“神秘”问题。
我目前正在使用我的ASP.NET MVC 3应用程序的Entity Framework 4.1 Code First方法,它工作得很好,直到昨天…

事情真的很糟糕,导致我的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 WONT创建任何数据库,甚至更糟糕的是,甚至还没有尝试使用来自上下文的表中的FILL现有数据库
我试图调试,但似乎应用程序只是跳过数据库初始化代码

我发现一个解决方案,就是使用这一行代码

var ctx = new MyContext();
ctx.Database.Initialize(true);

所以在这里我只是强制代码创建数据库

但事实上Database.Setinitializer不会工作真的很烦人…以前工作很好,我不知道发生了什么。
我查看了windows事件日志,sql server logs …但没有任何内容。只是沉
但也许我只是在错误的地方看? :S

有人可以告诉我发生了什么吗?

我正在使用Visual Web Developer 2010 sql Server Express 2008 R2

解决方法

数据库将仅在实际使用上下文时创建。

如果您在初始化程序中覆盖了Seed方法,如下所示:

protected override void Seed(MyContext context){...}

种子代码仅在使用MyContext实例时运行。

这就是为什么它使用时工作

var ctx = new MyContext();
ctx.Database.Initialize(true);

您可以通过在Global.asax.cs中的Application_Start()方法中使用您的上下文来强制创建它,如:

System.Data.Entity.Database.Setinitializer(new MyInitializer());

        MyContext db = new MyContext();
        db.Database.Initialize(true);
        //or even something like db.Users.Count();

或者当您使用上下文时,将会创建它。它可能看起来已经停止工作,因为您删除了一些将在应用程序启动时使用上下文的代码

原文地址:https://www.jb51.cc/mssql/84610.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐