5

Gram z kodem EF Najpierw wpadłem w kłopoty podczas implementacji niestandardowego MembershipProvider.MembershipUser i Entity Framework Code First

EF kod najpierw tworzę własną klasę obsługi tak:

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

I wdrożone również niektóre funkcje mojego niestandardowego MembershipProvider już od EF, ale niektóre z nich wymagają teraz MembershipUser albo jako parametr lub zwracana wartość.

public MembershipUser GetUser(string username, bool userIsOnline) 

Moją pierwszą myślą było odziedziczyć moją klasę użytkownika z MembershipUser, ale potem stracić kontrolę nad właściwości. Czy to zadziała nawet z kodem EF?

Alternatywnym pomysłem jest utworzenie metody ToMembershipUser() dla mojej klasy użytkownika. Czy to byłaby opcja? Co powinienem wziąć pod uwagę?

Jaki jest najlepszy sposób, aby sobie z tym poradzić?

Odpowiedz

8

Możesz użyć wzoru adaptera, aby rozwiązać ten problem.

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

Dostosuj parametry przekazane do konstruktora podstawowego w zależności od modelu encji.

+0

To wydaje się działać idealnie, dzięki! – magnattic

+0

Odziedziczyłem mojego 'CustomUser' z' MembershipUser', a problem powstał podczas zapisywania 'CustomUser' do bazy danych za pomocą Entity Framework. Jeśli ktoś używał kodu SQL, oto oficjalne instrukcje dla niestandardowego użytkownika MembershipUser [Jak: Implementować użytkownika z niestandardowym członkostwem] (http://msdn.microsoft.com/en-us/library/ms366730.aspx) – twnaing

+1

Nie zapomnij opisać klasy 'CusomUser' za pomocą adnotacji danych [NotMapped]. W przeciwnym razie pojawi się błąd dotyczący 'CustomUser' bez klucza unikatowego. – twnaing

Powiązane problemy