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

相关问题