1

私の最初の 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=&quot;server=localhost;User Id=user;password=pwd;database=fousutable&quot;" providerName="System.Data.EntityClient" />

このコードで見逃したものを教えてください。

  • ビジュアル スタジオ 2010 SP1
  • MVC4
  • simplemembership プロバイダーを使用しようとしています
  • インストールされたEntity Framework 5.0
  • .Net フレームワーク 4.0
  • データベース MySQL 5.1

更新 1:

エラーの詳細:

要求された .Net Framework Data Provider が見つかりません。インストールされていない可能性があります。

説明: 現在の 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 の下にもう 1 つのエントリを追加し、

<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 シンプル メンバーシップ データベースを初期化できませんでした」というメッセージが表示されました。

4

1 に答える 1

0

接続文字列の名前を確認します。ほとんどの場合、「DefaultConnection」から他の値に変更しており、行の SimpleMembershipInitializer で適切に変更したことを確認してください。

WebSecurity.InitializeDatabaseConnection("MyNewConnectionString", "Users", "UserId", "UserName", autoCreateTables: true);

ただし、AccountModels.cs ファイルには UsersContext があり、コンストラクターでそれを更新する必要があることに注意する必要があります。

    public UsersContext() : base("MyNewConnectionString")
    {
    }

そうしないと、存在しない「DefaultConnection」を見つけようとし続けます。それが失敗する理由かもしれません。

于 2013-11-26T20:23:35.567 に答える