MySql Membership provider - Esquema ausente ou incorreto

2

Temos um site ASP.NET em execução no IIS 7.5 com um banco de dados MySQL usando o conector .net, os provedores de associação / função estão configurados no web.config corretamente e funcionam - mas apenas temporariamente.

Historicamente (conector .NET 6.7.4.0 e anterior) sempre tivemos um problema depois de restaurar backups de site, incluindo as tabelas de associação, recebíamos um erro na página dizendo que tínhamos um "esquema ausente ou incorreto" para a associação provedor, o que é um absurdo, porque podemos ver as tabelas claramente no DB.

Para resolver isso, basta excluir as tabelas de associação do banco de dados, definir autogenerateschema = true no web.config, permitir que o provedor de funções gere as tabelas novamente, o que funciona. Podemos então restaurar a partir do nosso backup (o mesmo backup!) E sobrescrever as novas tabelas em branco com as nossas contas existentes e tudo funciona bem. Nós achamos que isso era apenas um capricho com o conector .net e como isso só acontecia depois de restaurar o banco de dados dos backups, não éramos muito incomodados.

Agora atualizamos para o conector .net 6.9.4.0. Estamos com o mesmo problema, só que é pior porque agora se o pool de aplicativos for reiniciado para esse site, ele acionará a mesma mensagem "esquema ausente ou incorreto" e aplique a correção acima. Fazer coisas como fazer alterações no web.config acionam um ciclo de pool de aplicativos, o que significa que não podemos fazer alterações no web.config sem baixar o site!

Este é o provedor de funções do web.config com alguns detalhes omitidos, nunca é alterado além de nós atualizarmos manualmente o número da versão.

<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>

Deve-se observar que depois de acionar esse erro e aplicar nossa correção, restauramos as tabelas de associação do mesmo backup exato, isso significa que as tabelas são idênticas antes / depois da correção, portanto, não pode haver um problema com o banco de dados. é algum estado interno do IIS.

    
por Sam Pickering 01.10.2014 / 13:53

1 resposta

2

Eu descobri isso, você precisa atualizar a versão do esquema armazenada no próprio banco de dados, você pode fazer isso manualmente, executando este SQL no banco de dados.

UPDATE my_aspnet_schemaversion SET version = 10

Substitua 10 por qualquer versão apropriada para o conector que você baixou.

    
por 07.10.2014 / 13:05