5

私はEF Code Firstで遊んでいますが、カスタムのMembershipProviderを実装するときに問題に遭遇しました。私もすでにEFのための私のカスタムのMembershipProviderの一部の機能を実装し、それらのいくつかは、今のパラメータまたはAのいずれかとしMembershipUserを必要とMembershipUserとEntity Frameworkコード

public class User 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 
    [Required] 
    public string UserName { get; set; } 
    [Required] 
    public string Password { get; set; } 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    public bool IsApproved { get; set; } 
    public DateTime? LastLoginDate { get; set; } 
    public DateTime? LastActivityDate { get; set; } 
    [Required] 
    public DateTime CreationDate { get; set; } 
    [Required] 
    public string ApplicationName { get; set; } 
} 

:私はこのような自分のユーザークラスを作成したEFコードファーストのために

戻り値

public MembershipUser GetUser(string username, bool userIsOnline) 

私が最初に考えたのはMembershipUserから私のUserクラスを継承することでしたが、その後、私は、プロパティのコントロールを失います。 EFコード・ファーストでも動作しますか?

代わりに、自分のユーザークラスにToMembershipUser()メソッドを作成する方法もあります。それはオプションですか?私は何を考慮する必要がありますか?

これを処理する最善の方法は何ですか?

答えて

8

この問題を解決するには、アダプタパターンを使用できます。

public class CustomUser : MembershipUser 
{ 
    public CustomUser(string providername, 
        User userAccount) : 
     base(providername, 
         userAccount.UserName, 
         userAccount.Id, 
         userAccount.Email, 
         passwordQuestion, 
         string.Empty, 
         true, 
         false, 
         userAccount.CreationDate, 
         userAccount.LastLoginDate, 
         userAccount.LastActivityDate, 
         new DateTime(), 
         new DateTime()) 
    { 
     UserAccount = userAccount; 
    } 

    public User UserAccount { get; private set; } 
} 

エンティティモデルの内容に応じて、ベースコンストラクタに渡されるパラメータをカスタマイズします。

+0

これは完璧に動作するようです、ありがとう! – magnattic

+0

私は 'MembershipUser'から' CustomUser'を継承し、Entity Frameworkを使って 'CustomUser'をデータベースに保存するときに問題が発生しました。誰かがSQLコードを使用する場合は、カスタムMembershipUser(How to:カスタムメンバーシップユーザーの実装)の公式ハウツーがあります(http://msdn.microsoft.com/en-us/library/ms366730.aspx) – twnaing

+1

'[NotMapped]'データアノテーションで 'CusomUser'クラスに注釈を付けるのを忘れてはいけません。さもなければUnique Keyを持たない 'CustomUser'に関するエラーが発生します。 – twnaing

関連する問題