MembershipUser和实体框架代码优先

本文关键字:代码 框架 实体 MembershipUser | 更新日期: 2023-09-27 18:06:55

我先用EF Code玩,现在在实现自定义MembershipProvider时遇到了麻烦。

对于EF Code,首先我创建了我自己的用户类,像这样:

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中行得通吗?

另一个想法是为我的用户类创建一个tommembershipuser()方法。这是一种选择吗?我需要考虑什么呢?

处理这个问题的最好方法是什么?

MembershipUser和实体框架代码优先

您可以使用适配器模式来解决这个问题。

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

根据你的实体模型自定义传递给基本构造函数的参数