MySql成员资格提供程序 – 缺less或不正确的模式

我们有一个使用.net连接器在IIS 7.5上运行的带有MySQL数据库的ASP.NET站点,会员/angular色提供程序正确设置在web.config中,并且可以正常工作 – 但只是暂时的。

从历史上看(.net连接器6.7.4.0及之前的版本),在恢复站点备份(包括成员资格表)后,我们总是遇到问题,页面上会显示错误信息,说明我们对成员资格提供者有“缺失或不正确的模式”是无稽之谈,因为我们可以在DB中清楚地看到表格。

为了解决这个问题,我们只需从数据库中删除成员表,在web.config中设置autogenerateschema = true,让angular色提供者再次自动生成表。 然后,我们可以从我们的备份(相同的备份!)恢复,并用我们现有的帐户覆盖新的空白表,一切工作正常。 我们认为这只是一个与.net连接器的怪癖,因为它只发生在从备份中恢复数据库之后,我们并没有太多的困扰。

现在我们已经升级到.net连接器6.9.4.0我们遇到同样的问题,只是更糟,因为现在如果应用程序池重新启动该网站,它会触发相同的“缺less或不正确的模式”的消息,我们已经应用以上修复。 做一些改变web.config的操作会触发一个应用程序池周期,这意味着我们无法在不下载站点的情况下对web.config进行更改!

这是来自web.config的angular色提供者,省略了一些细节,除了手动更新版本号以外,从来没有改变。

<roleManager defaultProvider="MySQLRoleProvider" enabled="true"> <providers> <clear /> <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.9.4.0, Culture=neutral, PublicKeyToken=xxxxxx" applicationName="xxxxx" connectionStringName="xxxxxx" autogenerateschema="True" /> </providers> </roleManager> 

需要注意的是,在触发该错误并应用我们的修复程序之后,我们从完全相同的备份恢复成员表,这意味着修复前后的表是相同的,所以它不是数据库的问题,它是一些内部IIS的状态。

我已经想通了,你需要更新存储在数据库本身的模式版本,你可以通过对数据库运行这个SQL来手动完成。

 UPDATE my_aspnet_schemaversion SET version = 10 

将10replace为适用于您下载的连接器的任何版本。