5

저는 EF Code First를 가지고 놀고 있습니다. 이제는 사용자 지정 MembershipProvider를 구현할 때 문제가 발생했습니다. EF 코드 먼저 들어 MembershipUser 및 Entity Framework 코드 우선

내가 이렇게 내 자신의 사용자 클래스를 만들었 : 나는 이미 EF에 대한 나의 정의는 MembershipProvider의 일부 기능을 구현

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

하지만, 그들 중 일부는 이제 매개 변수 또는 중 하나로 MembershipUser을 필요로 반환 값.

public MembershipUser GetUser(string username, bool userIsOnline) 

내 첫번째 생각은 MembershipUser에서 내 사용자 클래스를 상속했다, 그러나 나는 속성에 대한 제어를 잃게됩니다. EF Code First에서도 작동합니까?

또 다른 아이디어는 내 사용자 클래스에 대해 ToMembershipUser() 메서드를 만드는 것입니다. 그게 옵션일까요? 무엇을 고려해야합니까?

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

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

엔티티 모델에 따라 기본 생성자에 전달 된 매개 변수를 사용자 정의하십시오.

+0

완벽하게 작동하는 것 같습니다. 감사합니다! – magnattic

+0

나는'CustomUser'를'MembershipUser'에서 상속 받았고, Entity Framework를 사용하여'CustomUser'를 데이터베이스에 저장할 때 문제가 발생했습니다. 누군가가 SQL 코드를 사용한다면, 커스텀 MembershipUser [How to : Custom Membership User 구현하기]에 대한 공식적인 방법이 있습니다 (http://msdn.microsoft.com/en-us/library/ms366730.aspx) – twnaing

+1

'[NotMapped]'데이터 주석으로'CusomUser' 클래스에 주석을다는 것을 잊지 마십시오. 그렇지 않으면 고유 키가없는'CustomUser'에 대한 오류가 발생합니다. – twnaing

관련 문제