web-dev-qa-db-ja.com

既存のデータベースでのMVC4SimpleMembershipの使用-最初のEFモデル

MVC 4でSimpleMembershipを初めて使用しようとしていますが、既存のデータベースとそれに基づいて作成されたEF5モデルがすでにあります。私はたくさん検索しましたが、自分の場合にそれをどのように使用できるか、またすべてを自分のモデルの下に置くことができるかを見つけることができません。

誰かが私にこれを行う方法のアイデアを与えることができれば素晴らしいでしょう。

ありがとう

16
Amin

純粋に参照点として、ASP.NET MVC 4 Webアプリケーションプロジェクトの新しいインターネットアプリケーションテンプレートを作成することをお勧めします(つまり、[ファイル]> [新しいプロジェクト]を使用)。

@ zms6445が言うように、AccountControllerを見ると、InitializeSimpleMembership属性で装飾されています。この属性の実装は、ルートディレクトリ内のFiltersフォルダーにあるInitializeSimpleMembershipAttribute.csファイルにあります。

ここでは、これがパズルの欠けている部分です。SimpleMembershipProviderで使用されるように、既存のデータベースを接続する必要があります。これはあなたが必要とするコードです:

private class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        try
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
            }
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("Something is wrong", ex);
        }
    }
}

注意すべきいくつかの事柄:

  1. CONNECTION_STRING_NAMEはweb.configConnectionStringsのエントリです-ここではモデル接続文字列を使用できません-SimpleMembershipProviderはその形式を認識しません! System.Data.SqlClient接続文字列を指定する必要があります。

    <add name = "CONNECTION_STRING_NAME" connectionString = "data source = SERVER; initial catalog = DATABASE; user id = USER; password = PASSWORD;" providerName = "System.Data.SqlClient" />

  2. USER_TABLEは、名、姓などの追加のユーザー情報を保持するデータベース内のテーブルです。これは、USER_ID_FIELDを介して自動生成されたテーブルにリンクされています。

  3. USER_ID_FIELDは通常、Usersテーブルの主キーです。タイプはintである必要があります。

  4. USER_ID_NAMEはユーザーの一意の名前であり、メールアドレスの場合があります。

  5. SimpleMembershipが機能するために必要なテーブルがまだ存在しない場合に作成されるようにするには、autoCreateTablestrueに設定します。

もちろん、このコードはAccountControllerを介してページにアクセスした場合にのみ発生します。これは、属性によって装飾されているためです。そこにブレークポイントを設定して、実際の動作を確認できます。

これで始められるはずです。インターネットアプリケーションテンプレートは、行き詰まった場合に従うのに非常に適したテンプレートです。

お役に立てれば。

16

AppSettingsタグのweb.configで、次の行を追加します

<add key="enableSimpleMembership" value="true"/>

SimpleMembershipが組み込まれているので、ここから書く必要があります

[InitializeSimpleMembership]

パブリッククラスAccountControllerの上:Controller

ユーザーに特定のページへのログインを強制したい場合は、ページコントローラーに書き込みます

[Authorize]

そのテーブルはデータベースに自動的に生成されます。これらのテーブルにさらにフィールドを追加する場合は、単にグーグルで検索する必要があります。

詳細については、こちらのリンクをご覧ください http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net- 4-5-web-forms-and-asp-net-mvc-4-templates.aspx

3
zms6445