ЧленствоПользователь и Entity Framework Code Сначала - PullRequest
5 голосов
/ 28 августа 2011

Я играю с 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 для EF, но некоторые из них теперь требуют MembershipUser в качестве параметра или возвращаемого значения.

    public MembershipUser GetUser(string username, bool userIsOnline)

Моей первой мыслью было наследование моего класса User отMembershipUser, но тогда я теряю контроль над свойствами.Будет ли это вообще работать с EF Code First?

Альтернативная идея - создать метод ToMembershipUser () для моего пользовательского класса.Будет ли это вариант?Что я должен рассмотреть?

Какой лучший способ справиться с этим?

1 Ответ

8 голосов
/ 28 августа 2011

Вы можете использовать шаблон адаптера для решения этой проблемы.

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

Настройте параметры, передаваемые базовому конструктору, в зависимости от того, что имеет ваша модель сущности.

...