MVC5 앱을 만들고 있는데 이미 ASP.NET ID를 사용하여 사용자를 만들고 있습니다. 그래서, 나는 이미 AspNetUsers 테이블을 가지고 있으며, 사용자가 등록 할 때마다 엔트리를 얻습니다. 또한 수동으로 지정하는 관리자 역할이 있습니다. 등록 된 사용자는 관리자입니다. 반면에, 나는 또한 비즈니스를 등록해야하며 일반 사용자와 마찬가지로 로그인, 등록 및 일부 작업을 수행 할 수 있습니다. 요점은 일반 사용자와의 유사성 및 다른 필드를 모두 갖게된다는 것입니다. 예를 들어 전자 메일 주소, 암호 (일반 사용자처럼 해시하고 싶음), 전자 메일 확인, 고유 ID 등도 갖게됩니다. 그러나 주소, zip , 국가, 카테고리 등이 포함됩니다. 어떻게 이것을 MVC에서 얻을 수 있습니까?MVC5에서 두 가지 유형의 사용자를 만들려면 어떻게해야합니까?
ApplicationUser 클래스처럼해야합니까?
public class ApplicationUser : IdentityUser
내 비즈니스 모델을 IdendityUser로부터 상속해야합니까? 그렇다면 내 모델은 IdentityUser의 어떤 필드를 사용하고 어떤 필드를 사용해야하는지 어떻게 알 수 있습니까? 여기
내 현재의 비즈니스 모델 :public class Business
{
public int BusinessID { get; set; }
public string BusinessName { get; set; }
[ForeignKey("Category")]
public int CategoryID { get; set; }
public virtual Category Category { get; set; }
[ForeignKey("Subcategory")]
public int SubcategoryID { get; set; }
public virtual Subcategory Subcategory { get; set; }
public string BusinessAddress { get; set; }
public string BusinessZip { get; set; }
public string BusinessPhone { get; set; }
public string BusinessDescription { get; set; }
public string Facebook { get; set; }
public string Twitter { get; set; }
public byte[] ImageData { get; set; }
public string ImageMimeType { get; set; }
[Range(0.0, 5.0)]
public double BusinessRating { get; set; }
public virtual ICollection<Review> Reviews { get; set; }
}
그래서, 떨어져 그 분야에서, 내 표는 AspNetUsers 유사 물건, 이메일과 같은 EmailConfirmed, PasswordHash, SecurityStamp을 포함 할
등편집 :
비즈니스 모델의 일부 필드는 필수 사항입니다. 또한 아래에서 내 ApplicationUser 클래스를 찾을 수 있습니다.
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
그런 식으로 사용하면 자동으로 다른 입력란이 표시됩니까? AspNetUsers에서 다른 모든 필드를 얻고 싶지는 않지만 그 중 일부 필드 만 가져오고 싶습니다. – tett
예, 이것은 OOP 101입니다. 하위 클래스는 수퍼 클래스의 모든 속성을가집니다. 그러나, 다시 한번 말하지만, 실제로 거기에 있기 때문에, 당신이 실제로 그것을 사용해야한다는 것을 의미하지는 않습니다. 이것이 왜 우수한 애플리케이션 아키텍처에서 뷰 모델이 중요한지에 대한 이유입니다.특정 속성이 실제로 존재하지 않게하려면'BusinessUser : ApplicationUser' 및'NormalUser : ApplicationUser'와 같은 클래스를 만드는 것을 고려할 수 있습니다.이 클래스는 두 유형의 사용자가 공유하는 가장 기본적인 속성 집합 만 넣을 수 있습니다 'ApplicationUser'에 저장하지만, 그들은 여전히 모두 같은 테이블에 저장된다는 것을 기억하십시오. –
빠른 질문으로 Business : ApplicationUser 및 User : ApplicationUser라는 두 클래스를 만든 후 IdentityModels 파일에 다음과 같은 내용이 있습니다. public System.Data.Entity.DbSet Businesses {get ; 세트; } 및 User 모델에 대해 동일한 값을 반환합니다. 그런 다음 마이 그 레이션을 만들었지 만 Update-Database를 수행 할 때 "테이블 'aspnetusers'가 이미 있음"이라는 오류 메시지가 나타납니다. 이 문제를 어떻게 해결할 수 있습니까? 내 데이터베이스의 모든 테이블을 먼저 삭제 한 다음 update-database를 수행해야합니까? –
tett