web-dev-qa-db-ja.com

MySqlメンバーシッププロバイダー-スキーマがないか正しくない

.netコネクタを使用するMySQLデータベースを使用してIIS 7.5で実行されているASP.NETサイトがあり、メンバーシップ/ロールプロバイダーはweb.configで正しく設定されており、機能しますが、一時的にのみ機能します。

これまで(.netコネクタ6.7.4.0以前)、メンバーシップテーブルを含むサイトのバックアップを復元した後、常に問題が発生していました。ページに、メンバーシッププロバイダーの「スキーマがないか正しくない」というエラーが表示されました。 DBでテーブルをはっきりと見ることができるので、意味がありません。

これを解決するには、DBからメンバーシップテーブルを削除し、web.configでautogenerateschema = trueを設定し、ロールプロバイダーにテーブルを再度自動生成させます。これは機能します。次に、バックアップ(同じバックアップ!)から復元し、新しい空白のテーブルを既存のアカウントで上書きすると、すべてが正常に機能します。これは.netコネクタの癖であり、バックアップからDBを復元した後にのみ発生したため、それほど大騒ぎすることはありませんでした。

.netコネクタ6.9.4.0にアップグレードしたところ、同じ問題が発生しましたが、さらに悪いのは、そのWebサイトのアプリプールを再起動すると、同じ「スキーマがないか正しくない」というメッセージが表示され、上記の修正。 web.configに変更を加えるなどの操作を行うと、アプリプールサイクルがトリガーされます。つまり、サイトをダウンさせずにweb.configに変更を加えることはできません。

これはweb.configのロールプロバイダーですが、一部の詳細は省略されています。バージョン番号を手動で更新する以外は変更されません。

<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の状態。

2
Sam Pickering

私はこれを理解しました。データベース自体に格納されているスキーマバージョンを更新する必要があります。データベースに対してこのSQLを実行することにより、手動でこれを行うことができます。

UPDATE my_aspnet_schemaversion SET version = 10

10を、ダウンロードしたコネクタに適したバージョンに置き換えます。

2
Sam Pickering