5

我正在玩EF Code First,現在在實現自定義MembershipProvider時遇到了麻煩。MembershipUser和Entity Framework代碼優先

對於EF代碼首先,我創建了自己的用戶類是這樣的:

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已經定製的MembershipProvider的一些功能,但其中一些現在需要MembershipUser無論是作爲參數或返回值。

public MembershipUser GetUser(string username, bool userIsOnline) 

我首先想到的是從MembershipUser繼承我的User類,但我會失去對性的控制。這甚至可以和EF Code First一起工作嗎?

另一種想法是爲我的用戶類創建一個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的正式操作方法[如何實現自定義成員身份用戶](http://msdn.microsoft.com/zh-cn/library/ms366730.aspx) – twnaing

+1

不要忘記用'[NotMapped]'數據註釋來註釋'CusomUser'類。否則,你會得到'CustomUser'沒有唯一鍵的錯誤。 – twnaing

相關問題