MembershipUser and Entity Framework Code First

5

我是一个使用EF Code First的开发者,现在在实现自定义MembershipProvider时遇到了麻烦。

对于EF Code First,我创建了自己的用户类,如下所示:

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; }
}

我已经实现了自定义 MembershipProvider 的一些功能,但其中一些现在需要 MembershipUser 作为参数或返回值。

    public MembershipUser GetUser(string username, bool userIsOnline)

我的第一反应是从MembershipUser继承我的用户类,但这样我就失去了对属性的控制。这种方法在EF Code First中可行吗?
另一个想法是为我的用户类创建一个ToMembershipUser()方法。这是一个选项吗?我需要考虑什么?
处理这个问题的最佳方法是什么?
1个回答

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; }
}

根据实体模型的需求,定制传递给基础构造函数的参数。

我从MembershipUser继承了我的CustomUser,当使用Entity Framework将CustomUser保存到数据库时出现了问题。如果有人想使用SQL代码,这里是自定义MembershipUser的官方操作指南如何:实现自定义Membership User - Tun
1
不要忘记用 [NotMapped] 数据注释来注释 CustomUser 类。否则,你会收到关于 CustomUser 没有唯一键的错误提示。 - Tun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接