在我的第一个MVC 4应用程序中,我在代码中遇到以下错误。
WebSecurity.InitializeDatabaseConnection("fousuEntities", "usertable", "UserID", "UserCode", autoCreateTables: true);
在我的配置文件中,我有以下条目,
<add name="fousuEntities" connectionString="metadata=res://*/fousutable.csdl|res://*/fousutable.ssdl|res://*/fousutable.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;User Id=user;password=pwd;database=fousutable"" providerName="System.Data.EntityClient" />
请帮助我在此代码中错过了什么?
更新1:
错误详情:
无法找到请求的.Net Framework数据提供程序。它可能没有安装。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:无法找到请求的.Net Framework数据提供程序。它可能没有安装。
Line 32: using (var context = new UsersContext())
Line 33: {
Line 34: if (!context.Database.Exists())
Line 35: {
Line 36: // Create the SimpleMembership database without Entity Framework migration schema
更新2:
通过更改web.config中的条目,我能够摆脱上述错误。如下所示,虽然最终得到了另一个错误。
<add name="fousuEntities" connectionString="Server=MySQL; Database=fousutable; uid=user; pwd=pwd;" providerName="MySql.Data.MySqlClient"/>
并在System.Data,
下再添加一个条目<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.1.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
现在我得到的新错误是,
调用目标抛出了异常。为LazyInitializer行,
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Ensure ASP.NET Simple Membership is initialized only once per app start
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}
在参考 InnerException 的详细信息后,我得知,“无法初始化ASP.NET Simple Membership数据库。”
答案 0 :(得分:0)
检查连接字符串的名称。很可能您已从“DefaultConnection”更改为任何其他值,并确保您已在行中的SimpleMembershipInitializer中正确更改了
WebSecurity.InitializeDatabaseConnection(“MyNewConnectionString”,“Users”,“UserId”,“UserName”,autoCreateTables:true);
但是你必须要知道,在你的AccountModels.cs文件中你有一个UsersContext,你必须在构造函数中更新它:
public UsersContext() : base("MyNewConnectionString") { }
否则它将继续尝试查找不存在的“DefaultConnection”。这可能是它失败的原因。