2

ASP.Net MVC 4 の Simple Membership をセットアップする方法を理解しようとしています。現在のデータベースにユーザーを収容するテーブルには、「dbo」とは異なるスキーマがあります。データベース接続を初期化するときにスキーマを指定するにはどうすればよいですか。

            WebSecurity.InitializeDatabaseConnection
            (
                connectionStringName: "GuessAListConnection",
                userTableName: "UserProfile",
                userIdColumn: "UserId",
                userNameColumn: "UserName",
                autoCreateTables: false
            );

スキーマのオプションはありません。userTableName にスキーマを追加しようとしましたが、エラーが発生します。助言がありますか?

ありがとう

トム

4

2 に答える 2

1

WebSecurity は、データベース ユーザーのデフォルト スキーマを使用します。私が知っている別のスキーマを指定する方法はありません。

于 2013-03-27T06:50:37.160 に答える
1

ユーザー/認証テーブルが dbo とは異なるスキーマ (またはデータベース ユーザーの既定のスキーマ) にあり、それがビューを使用する場合、別の解決策を見つけました。

私のデータベースでは、ユーザー/認証テーブルは「セキュリティ」スキーマにスコープされています。Person テーブルが存在する Person スキーマもあります。Person テーブルに FirstName、LastName だけを格納します。

認証のためにすべてのテーブルをまとめるビューを作成し、次のフィールドを返しています。

UserId、UserName、PersonId、FirstName、LastName、AuthenticationType、LastLoginDate、IsLockedOut

私のアプリケーションでは、フォーム、Windows、Facebook、Twitter など、さまざまな方法で個人を認証できます。UserId と UserName は、さまざまな認証タイプに関連しています。

ASP.Net MVC の UserProfile クラスは次のとおりです。

  [Table("__vwRegisteredUser")]
  public class UserProfile
  {
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public String UserName { get; set; }
    public int PersonId { get; set; }
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String AuthenticationTypeName { get; set; }
    public Boolean IsLockedOut { get; set; }
    public DateTime LastLoginDate { get; set; }

    public int Id
    {
        get
        {
            return PersonId;
        }
    }

    public String Name
    {
        get
        {
            return String.Format("{0} {1}", FirstName, LastName);
        }
    }
}

Table 属性にビューを使用していることに注意してください。また、PersonId を Id プロパティとして返し、FirstName と LastName を Name プロパティとして連結しています。UserName は、認証タイプ (フォーム認証を使用している場合は Windows ユーザー名、電子メール アドレス、または Facebook や Twitter が返すもの) から返される値です。したがって、私の Security.Authentication テーブルの UserName には一貫性がありません。

データベース接続の初期化には、SimpleMembership がメンバーシップ テーブルを生成するためにテーブルが必要です。カスタム メンバーシップ テーブルを作成する方法はあるかもしれませんが、まだわかりません。

于 2013-03-27T16:43:13.653 に答える