Asp.net mvc 3 在全局.Asax ApplciaitonStart中使用Database.SetInitializer时出现“已打开DataReader…”错误
我想知道是否有其他人对从全局asax运行DB初始值设定项有问题 我在ApplicationStart中有以下内容:Asp.net mvc 3 在全局.Asax ApplciaitonStart中使用Database.SetInitializer时出现“已打开DataReader…”错误,asp.net-mvc-3,entity-framework-4.1,Asp.net Mvc 3,Entity Framework 4.1,我想知道是否有其他人对从全局asax运行DB初始值设定项有问题 我在ApplicationStart中有以下内容: Database.SetInitializer(new MyInitializer()); 这运行正常,在应用程序启动之后,我尝试在服务中创建的登录方法。它尝试打开上下文时失败 我的测试应用程序的设置方式几乎相同,没有问题 有什么想法吗 更新: 我尝试添加MultipleActiveResultSets=True,现在出现以下错误: 基础提供程序在打开时失败 更新2: 事实证明
Database.SetInitializer(new MyInitializer());
这运行正常,在应用程序启动之后,我尝试在服务中创建的登录方法。它尝试打开上下文时失败
我的测试应用程序的设置方式几乎相同,没有问题
有什么想法吗
更新:
我尝试添加MultipleActiveResultSets=True,现在出现以下错误:
基础提供程序在打开时失败
更新2:
事实证明,我的应用程序是在初始化程序仍在完成时加载的。这就是为什么我会犯这些错误。所以,我发现应用程序的一部分会加载,然后它必须从数据库请求一些东西,在这个点上它创建了数据库并对其进行种子。此时,应用程序的一部分已加载,但您不知道初始值设定项仍在运行。就像我在更新中所说的那样,直到大部分应用程序已经运行之后,才创建DB。它仍然在运行,即使作为一个用户,你不会知道它。所以我创建了一个初始化项目并添加了这个类:
public static class InitializeAndSeed
{
public static void Initialize()
{
Database.SetInitializer(new MyContextInitializer());
using (var db = new MyContext())
{
db.Database.Initialize(false);
}
}
}
在我的应用程序中,我称为InitializeAndSeed.Initialize。工作得很好
帮助我解决了这个问题。您能定义MyInitializer类吗?我稍后会给出代码,但我发现初始化DB太晚是个问题。