2012-12-25 3 views
2

사용자 클래스를 만들고 ConfirmPassword 필드를 추가하려고합니다. 내 데이터베이스에이 필드가 없으므로 어떻게 처리해야합니까? 나는 또한 AutoMapper를 사용하고 있는데,이 필드를 무시하기 위해 매퍼 (mapper)에게 예를 들자면,이 여분의 필드를 다루기 위해 무엇인가를해야 하는가?EF 코드 첫 번째 및 확인 필드

여기에 내 사용자 클래스가 있고, 방금 버디 클래스에 NotMapped 속성을 추가했습니다. 이 모든 것이 내가해야 할 일인가요? 아니면이 시나리오를 처리하는 데 필요한 추가 코딩이 있습니까?

public partial class User 
{ 
    public User() 
    { 
     //this.DateCreated = DateTime.Now; //set default value 
     Roles = new HashSet<Role>(); 
    } 

    public ICollection<Role> Roles { get; set; } //many to many relationship 

    public int UserId { get; set; } 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string ConfirmPassword { get; set; } 
    public string City { get; set; } 

    //foreign key 
    public int CountryId { get; set; } 
    //navigation properties 
    public virtual Country Country { get; set; } 

    //foreign key 
    public int LanguageId { get; set; } 
    //navigation properties 
    public virtual Language Language { get; set; } 

    public string EmailAddress { get; set; } 
    public long FacebookId { get; set; } 
    public DateTime DateCreated { get; set; } 
} 

//buddy class, validation in here because not supported in Fluent API 
//test in ie 
//MetadataType decorated class 
[MetadataType(typeof(UserMetadata))] 
public partial class User 
{ 
} 

//Metadata type 
internal sealed class UserMetadata 
{ 
    [Required] 
    public string FirstName { get; set; } 

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

    [Required] 
    [Remote("IsUsernameAvailable", "Validation")] 
    [DataType(DataType.Text)] 
    [DisplayName("Username")] 
    public string Username { get; set; } 

    [Required] 
    public int CountryId { get; set; } 

    public string Password { get; set; } 

    [NotMapped] 
    public string ConfirmPassword { get; set; } 
    public string City { get; set; } 
    public int LanguageId { get; set; } 
    public string EmailAddress { get; set; } 
    public long FacebookId { get; set; } 
    public DateTime DateCreated { get; set; } 
} 

}

편집은 다음 ConfirmPassword 필드가 아닌 도메인 모델 객체, 뷰 모델 클래스에

public class UserDTO 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string Surname { get; set; } 
     public string Username { get; set; } 
     public string Password { get; set; } 
     public string City { get; set; } 
     public string CountryName { get; set; } 
     public string LanguageName { get; set; } 
     public string EmailAddress { get; set; } 
     public long FacebookId { get; set; } 
     public DateTime DateCreated { get; set; } 
} 

답변

2

을 정의해야합니다으로 추적 : 여기 내 해당 DTO 클래스입니다 엔티티 프레임 워크. 이 값은 데이터베이스에 저장되지 않으므로 도메인 모델의 일부가 아니어야합니다.

이 속성은보기 모델 클래스 (계정 만들기보기에 매핑 된 클래스)에서만 정의해야합니다. AutoMapper가 CreateUserViewModel과 User 모델을 매핑 할 때 도메인 모델의 일부가 아니어야하므로이 필드를 처리하기 위해 AutoMapper와 특별한 단계를 수행 할 필요가 없습니다.

+0

유효성 검사를 위해 DTO 및 버디 클래스를 사용하고 있습니다. ConfirmPassword 속성이 유효성 검사를받을 때 클래스에 있어야하므로 제안을 어떻게 구현합니까? – user517406

+1

아니요, ConfirmPassword 속성은 이미 내 대답에서 설명한대로 뷰 모델에만 있어야합니다. 그런 다음이 뷰 모델의 유효성을 검사합니다. 뷰 모델이 검증되면 AutoMapper를 사용하여 DTO 또는 도메인 모델 또는 뷰 모델에서 호출하는 모든 것을 구성 할 수 있습니다. 그러나 ConfirmPassword 필드는 뷰 모델에서만 의미가 있습니다. 모델의 다른 레이어에 넣어두면 잘못한 것 같습니다. –

+0

Model vs View Model과 다소 혼동 스럽습니다. 데이터베이스와 상호 작용하는 모델이 있으며, UI 측면에서 사용되는 DTO가 있습니다. 이 시나리오에서는 View Model이 어디에 있습니까? – user517406