2015-01-28 3 views
1

N 계층 아키텍처 및 사용자 지정 ASP.NET ID 서비스 및 리포지토리가 포함 된 ASP.NET MVC 프로젝트를 만들려고합니다. 사용자 지정 사용자 저장소를 구현했습니다.ASP.NET ID : 사용자 지정 저장소

UserStore: UserIUserStore<User>, IUserPasswordStore<User>, IUserRoleStore<User>, IUserLoginStore<User>, IUserEmailStore<User> 

이미 등록 및 로그인을 구현했습니다. 이제 소셜 네트워크를 통해 로그인을 구현하고 싶습니다.

public class User : IUser<string> 
{ 
    [Required] 
    public string Id { get; set; } 

    [Required] 
    public string UserName { get; set; } 

    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 

    [Required] 
    public string PasswordHash { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 

    public virtual ICollection<UserLoginInfo> Logins { get; set; } 
} 

UserLoginInfo는 로그인 정보로 IUserLoginStore에서 사용되는 sealead 클래스입니다. 내가 마이그레이션을 추가하고 싶었 그러나 나는이 오류가있어 : 나는 사용자에게 외래 키와 로그인 테이블을 확장하는 방법에 어떤 해결책을 찾기 위해 노력했습니다

NtierMVC.Repositories.UserLoginInfo: : EntityType 'UserLoginInfo' has no key defined. Define the key for this EntityType. 
Login: EntityType: EntitySet 'Login' is based on type 'UserLoginInfo' that has no keys defined. 

을 (같은 당신은 기본 userstore을 사용하는 경우) 그러나 아무도 발견하지. 어떤 생각?

도움 주셔서 감사합니다.

답변

1

글쎄, 사용자 정의 로그인 클래스로 해결했습니다.

public class ExternalLogin 
{ 
    public string UserId { get; set; } 

    [Key, Column(Order = 0)] 
    public string LoginProvider { get; set; } 

    [Key, Column(Order = 1)] 
    public string ProviderKey { get; set; } 

    public UserLoginInfo GetUserLoginInfo() 
    { 
     return new UserLoginInfo(LoginProvider, ProviderKey); 
    } 
} 

public class User : IUser<string> 
{ 
    // user properties 

    public virtual ICollection<ExternalLogin> Logins { get; set; } 
}