gpt4 book ai didi

sql-server-2008 - Entity Framework Database.SetInitializer根本不起作用

转载 作者:行者123 更新时间:2023-12-03 01:40:03 25 4
gpt4 key购买 nike

我在这里遇到了这种“神秘”的问题。我目前正在我的 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 不会创建任何数据库,更糟糕的是,它甚至不会尝试使用上下文中的表填充现有数据库...我尝试调试,但应用程序似乎只是跳过数据库初始化代码...

我找到了一个解决方案,就是使用这行代码

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

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

但是 Database.SetInitializer 不起作用这一事实真的很烦人......它以前工作得很好,我不知道发生了什么。我查看了 Windows 事件日志、SQL Server 日志...但什么也没有。只是沉默。但也许我只是找错地方了? :S

谁能告诉我发生了什么事吗?

P.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();

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

关于sql-server-2008 - Entity Framework Database.SetInitializer根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com