2

私はMySQLを使用したMVCが初めてです。MySQL を使用して MVC 4 で最初のアプリケーションをコード化しています。

public class Category
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual IEnumerable<Product> Products { get; set; }

}

public class Product
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
    public int CategoryID { get; set; }

    public virtual Category Category { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }
}

そしてweb.configで:

  <connectionStrings>
    <add name="MyContext" connectionString="server=localhost;  User Id=root;  Pwd=mypass;  Persist Security Info=True;  database=catalogue" providerName="MySql.Data.MySqlClient " />
  </connectionStrings>

したがって、これによりmysql にカタログデータベースが作成されます。しかし、私は mysql のメンバーシップも使いたいです。登録し、ユーザーを作成し、その役割を管理します。たとえば、mvc4 のデフォルトの AccountModels を使用すると、

このコードを web.config に追加しました。

<system.web>

    <membership defaultProvider="MySQLMembershipProvider">
          <providers>
            <clear />
            <remove name="MySQLMembershipProvider" />
            <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="MySQL default application" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" enablePasswordRetrieval="True" enablePasswordReset="True" requiresQuestionAndAnswer="False" requiresUniqueEmail="False" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
          </providers>
        </membership>

        <profile defaultProvider="MySQLProfileProvider">
          <providers>
            <clear />
            <remove name="MySQLProfileProvider" />
            <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="Profiles" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />
          </providers>
        </profile>

        <roleManager enabled="false" defaultProvider="MySQLRoleProvider">
          <providers>
            <clear />
            <remove name="MySQLRoleProvider" />
            <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.5.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="Project Roles" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" />
          </providers>
        </roleManager>

  </system.web>

アプリケーションを実行すると、次のエラーが発生します。

ここに画像の説明を入力

どのステップを忘れましたか? メンバーシップを使用できません。

(下手な英語でごめんなさい)

4

3 に答える 3

3

VS2010 または VS2012 の MVC4 インターネット テンプレートに同梱されているメンバーシップ プロバイダーを、SQL Server ファミリ以外のデータベース、つまり SQL Server、SQL Compact、Azure で使用する場合、MVC4 はデータベースに依存しない SimpleMembership プロバイダー。

そうは言っても、それはあなたが望むものを達成できないという意味ではありません。Microsoft ASP.NET Universal Providers Core Libraries を使用することを提案します。この優れた投稿を読むことをお勧めします

この記事で、著者の Scott Hanselman は次のように述べています。

これらのユニバーサルな "既定のプロファイル プロバイダー" を使用すると、適切な接続文字列を設定するだけで、これらのサービスを使用するアプリケーションは、コードを変更することなく、SQL Server (および Express)、SQL Server Compact、および SQL Azure で動作します。

うーん、他の SQL 標準はどうですか?では、次の手順に従いましょう。

1) 最初に接続文字列を変更してから、Nuget Package Manager を使用して MySQL.Web と MySQL.Data をインストールしてください。

    <connectionStrings>
      <add name="MySQLConn" connectionString="Server=localhost;Database=dbname;Uid=dbuser;Pwd=dbpass;" />
    </connectionStrings>

2) Nuget パッケージ マネージャーを使用して、「Microsoft ASP.NET ユニバーサル プロバイダー コア ライブラリ」を見つけてインストールするか、パッケージ マネージャー コンソールで次のコマンドを実行します。

Install-Package system.web.providers
Install-Package Microsoft.AspNet.Providers.Core

3) [プロジェクト] メニュー -> [ASP.Net 構成] に移動すると、Web プロジェクトの ASP ネット管理ツールがブラウザーに表示されます。

4) 次に、[プロバイダー] タブに移動し、[機能ごとに異なるプロバイダーを選択する (詳細)] に移動します。

5) 必ず MySQL メンバーシップ プロバイダーを選択してください。

6) 次に、[セキュリティ] タブに移動し、プロジェクトに必要と思われるロールとユーザーをいくつか作成します。 なんらかの理由でここでエラーが発生した場合は、Web 構成を変更して、メンバーシップ、ロール、およびプロファイルをこれに置き換えてみてください

7) 楽しみましょう!

これが役立つことを願っています

PS: 私もこれについて非常に新しいので、他の SQL データベースを対象とする MVC4 の最適なメンバーシップ プロバイダーについての提案をお待ちしています。

于 2013-03-28T03:06:10.000 に答える
1

ちなみに、VS2010やVS2012のASP Net MVC3やMVC4のInternet Templateと同じAccount Controllerは使えません。ただし、それをすべて自分で実装する必要があります。

ログイン/ログオフ/ロール管理/ユーザーの作成などの MVC テンプレートをすばやく追加する場合は、たとえばSecurity Guard を使用できます。

私が提案した方法はパッチでもハッカーでもありません。ASP ネット メンバーシップ プロバイダーは Microsoft によって長い間実装され、促進され、MySQL はネットに機能を追加しました。コネクタ、そして彼らはそれについて投稿しています. ここ

ASP Net Membership Provider の使用に強く反対する意見がない限り、このメソッドを安全に使用できますが、私にはわかりません。

于 2013-03-29T01:20:25.647 に答える
0

これは GridWizzard から取得したものです - appsettingsで enableSimpleMembership を false に設定するだけです。to-implement-membershiproleprovider/

于 2014-03-06T00:51:36.513 に答える