我正在玩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()方法。这是一个选择吗?我需要考虑什么?
处理此问题的最佳方法是什么?
答案 0 :(得分: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; }
}
根据您的实体模型自定义传递给基础构造函数的参数。