Asp.net mvc 4 WebSecurity.Initialized为true,但表不存在
我的web应用程序有一个自我安装过程;它正确地检测到数据库未初始化,并通过迁移对其进行初始化;我还进行了自动集成测试,测试安装在这些情况下是否正常工作,并进行了冒烟测试,登录并注册安装表单上提供的第一个用户 我最近从MVC3切换到MVC4。我使用了MVC3中的内置存储提供程序,即aspnet_*表;在MVC4中,带有UserProfile表的Web安全性 我不再从.SQL文件手动运行所有MVC3存储过程,而是调用WebSecurity.InitializeDatabaseConnection。事实上,我的代码片段是:Asp.net mvc 4 WebSecurity.Initialized为true,但表不存在,asp.net-mvc-4,Asp.net Mvc 4,我的web应用程序有一个自我安装过程;它正确地检测到数据库未初始化,并通过迁移对其进行初始化;我还进行了自动集成测试,测试安装在这些情况下是否正常工作,并进行了冒烟测试,登录并注册安装表单上提供的第一个用户 我最近从MVC3切换到MVC4。我使用了MVC3中的内置存储提供程序,即aspnet_*表;在MVC4中,带有UserProfile表的Web安全性 我不再从.SQL文件手动运行所有MVC3存储过程,而是调用WebSecurity.InitializeDatabaseConnection。事
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("ApplicationServices", "UserProfile", "UserId", "UserName", true);
MigrationsWrapper.MigrateToLatestVersion(); // wrapper around migratordotnet
}
不幸的是,我注意到一个有趣的错误。当我编译服务器代码并运行安装测试时,在新安装空数据库后,它会按预期通过。如果我立即再次运行测试,它将失败
失败的原因是什么?在我的安装测试中,我核掉了所有的DB表,并期望安装重新创建它们。但是,在本例中,WebSecurity.Initialized返回true而不是false。因此,我从未点击第二行初始化和创建表。如果我把那条线移到外面,我会得到一个异常,我正在双重初始化
不幸的是,我在这里真正需要的是像WebSecurity.CreateTables这样的方法,它并不存在。因此,我陷入了僵局。我该怎么处理
另外,如果我尝试自己重新创建UserProfile表,我会遇到一个问题,UserId主键被插入为null——可能是因为我缺少其他表
我应该如何处理这种情况?目前唯一的解决办法是重置IIS。悲伤,但真实;这样做将重置WebSecurity.Initialized,一切正常 因为我需要在应用程序启动时重新启动,所以我可以使用Process.start以编程方式重置IIS