c#
  • automapper
  • 2013-07-16 5 views 4 likes 
    4

    매핑 값을 조회 할 때 데이터베이스를 호출하는 다른 방법이 있습니까? 매핑 로직 내에서 데이터베이스 호출을하는 것은보기 흉한 것처럼 보입니다. 이걸 어떻게 다룰 수 있니?오토 마퍼 데이터베이스 조회?

    public int GetGenderByString(string gender) 
    { 
        string sql = "select sexid from Sexes where sex = '" + gender "'"; 
        int sexid = ..... 
        ...... 
        return sexid; 
    } 
    

    답변

    0

    클래스에 다른 필드를 추가하는 것은 저장할을 통해이 문제를 해결 :

    예를 들어

    는 테이블 내가이

    CreateMap<StagingPerson, Person>() 
        .ForMember(dest => dest.SEXID, 
        m => m.ResolveUsing<SexLookupResolver>().FromMember(src => src.Gender));   
    
    public class SexLookupResolver : ValueResolver<string, int> 
    { 
    protected override int ResolveCore(string source) 
    { 
        int id = -1; 
        if (source == "Male") 
        id = dataAccess.GetGenderByString("M"); 
        else if(source == "Female") 
        id = dataAccess.GetGenderByString("F"); 
        else if(source == "?") 
        id = dataAccess.GetGenderByString("?"); 
        else 
        id = dataAccess.GetGenderByString("?"); 
        return id; 
    } 
    } 
    

    DATAACCESS과 같은 작업을 수행 할 수 있습니다 아래에 SEXID 그렇게 리졸버를 사용하여 저장 섹스의 문자열 버전. 맵핑이 문자열로 맵핑되도록 변경되고 SEXID 필드는 무시되고 나중에 DAL 조작 중에 설정됩니다.

    CreateMap<StagingPerson, Person>() 
        .ForMember(dest => dest.SexString, u => u.MapFrom(src => src.Sex)) 
        .ForMember(dest => dest.SEXID, u.Ignore())); 
    
    /// The source class 
    public class StagingPerson 
    { 
        /// holds "M", "F", "U", "?", etc 
        public string Gender {get;set;} 
    } 
    

    /// the destination class 
    public class Person 
    { 
        public int SEXID {get;set;} 
    
        // New property to store the source string value 
        // looked up in the Data Access Layer to determine the sexId 
        public string SexString {get;set;} 
    } 
    
    관련 문제