ユーザー/認証テーブルが 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 がメンバーシップ テーブルを生成するためにテーブルが必要です。カスタム メンバーシップ テーブルを作成する方法はあるかもしれませんが、まだわかりません。