c# - MembershipUser 和 Entity Framework 代码优先

标签 c# asp.net entity-framework asp.net-membership membership-provider

我正在尝试使用 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; }
}

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

    public MembershipUser GetUser(string username, bool userIsOnline)

我的第一个想法是从 MembershipUser 继承我的 User 类,但后来我失去了对属性的控制。这甚至可以与 EF Code First 一起使用吗?

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

处理此问题的最佳方法是什么?

最佳答案

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

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

根据您的实体模型具有的内容自定义传递给基本构造函数的参数。

关于c# - MembershipUser 和 Entity Framework 代码优先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7220472/

相关文章:

c# - 如何仅匹配正则表达式中的第一个数字

C#:选择具有包含子字符串的属性的节点的 XPath?

asp.net - 成员(member)提供者错误 mvc web.config

asp.net - Visual Studio 项目随机命名的 DLL

asp.net - 如何获取 EntityDataSource 以允许我访问子实体?

c# - Visual Studio 中的分布式 LoadTest 执行上下文

c# - 确保安全的 HTTPs 连接

c# - Edmx 缺少外键

用于屏蔽文本框输入的 C# 十六进制掩码

c# - EF 查询 Oracle 抛出 "ORA-12704: character set mismatch"