AutoMapper - Map의 실체를 위한 다리(둘)

앞의 기사에서 ORM을 언급한 다음에 EF를 사용했고 오늘은 실체 전환 관계의 모델인 AutoMapper를 소개합니다.

무엇


AutoMapper는 하나입니다.NET의 객체 매핑 도구입니다.주요 역할은 영역 대상과 빈혈 모델 간의 전환, 데이터베이스 조회 결과가 실체 대상에 비치는 것이다.
빈혈 모형은 무엇입니까?빈혈모델(DTO, Data Transfer Object, 즉 속성만 포함하고 필요한 데이터만 저장할 수 있으며 데이터 전달에 사용되는 다른 어떠한 불필요한 방법 데이터도 없다.
그러면 이것은 무슨 뜻입니까? 예를 들어 ORM에서 데이터베이스와 상호작용하는 모델 모델은 많은 속성 변수 방법을 가진 실체입니다.한편, 우리가 다른 시스템(또는 시스템의 다른 구조)과 데이터 상호작용을 할 때 결합성 고려나 안전성 고려 또는 성능 고려(어쨌든 여러 가지 고려)에서 이 모델 모델을 직접 전달하고 싶지 않다. 이때 우리는 빈혈 모델을 만들어 데이터를 저장하고 전달할 것이다.
그렇기 때문에 우리는 모델 모델과 DTO 실체 사이의 상호 전환을 해야 한다.

어떻게


1. 두 실체의 속성은 완전히 같다


그것을 응용하기 전에 우리는 먼저 vs에서 그것을 인용해야 한다.도구 아래의 라이브러리 패키지 관리자를 클릭하여 패키지 관리 컨트롤러를 선택하세요!그런 다음 Install-PackageAutoMapper를 입력합니다.또는 해결 방안을 우클릭하고 nuget 관리에서 AutoMapper를 찾아서 설치하고 AutoMapper를 도입하면 안심하고 사용할 수 있습니다
모델 솔리드
<span style="font-size:18px;">namespace testautomapper  
{  
    //   
    public class studentSource  
    {  
        public string name { get; set; }  
        public int age {get;set;}  
        public string sex { get; set; }  
    }  
}</span>  
DTO 엔티티
<span style="font-size:18px;">namespace testautomapper  
{  
    //   
    public class studentPurpost  
    {  
        public string name { get; set; }  
        public string age { get; set; }  
        public string sex { get; set; }  
    }  
}</span>  
        
단일 솔리드 변환 프로세스
<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //   , (Model), (DTO)
            Mapper.CreateMap<studentSource, studentPurpost>();  
            //   
            studentSource sSource = new studentSource  
            {  
                name = " ",  
                age = 23,  
                sex = " "  
            };  
            //   , (DTO)
            var sPurpost = Mapper.Map<studentPurpost>(sSource);  
            Console.WriteLine(sPurpost.name + sPurpost.sex + sPurpost.age);  // 
        }  
    }  
</span>}</span>  
다중 솔리드 변환 프로세스(솔리드 세트)
<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //   
            Mapper.CreateMap<studentSource, studentPurpost>();  
            //   
            List<studentSource> list = new List<studentSource>();  
            studentSource s = new studentSource  
            {  
                name = "cuixiaoguang",  
                age = 13,  
                sex = "nan"  
            };  
            list.Add(s);  
  
            //   
            List<studentPurpost> sPurpostList = Mapper.Map<List<studentSource>, List<studentPurpost>>(list);  
            Console.WriteLine(sPurpostList[0].age + sPurpostList[0].name + sPurpostList[0].sex);  
        }  
    }  
}</span></span>  

2. 두 실체의 속성이 완전히 같지 않다


모델 솔리드
<span style="font-size:18px;">namespace testautomapper  
{  
    //   
    public class studentSource  
    {  
        public string Sname { get; set; }  
        public int age {get;set;}  
        public string sex { get; set; }  
    }  
}</span> 
DTO 엔티티
<span style="font-size:18px;">namespace testautomapper  
{  
    //   
    public class studentPurpost  
    {  
        public string Pname { get; set; }  
        public string age { get; set; }  
        public string sex { get; set; }  
    }  
}</span>  
솔리드 변환(솔리드 컬렉션 원리)
AutoMapper는 ForMember를 사용하여 각 필드의 매핑 규칙을 지정합니다. 참조: The each custom member configuration uses an action delegate to configure each member.다행히 강력한 lambda 표현식이 있고 규칙의 정의가 간단명료하다. 
<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //   , (Model), (DTO)
            Mapper.CreateMap<studentSource, studentPurpost>();  
            // , 
            map.ForMember(d => d.Sname, opt => opt.MapFrom(s => s.Pname)); 
            //   
            studentSource sSource = new studentSource  
            {  
                Sname = " ",  
                age = 23,  
                sex = " "  
            };  
            //   , (DTO)
            var sPurpost = Mapper.Map<studentPurpost>(sSource);  
            Console.WriteLine(sPurpost.name + sPurpost.sex + sPurpost.age);  // 
        }  
    }  
</span>}</span> 

3. 두 실체의 속성은 완전히 다르다


모델 솔리드
<span style="font-size:18px;">namespace testautomapper  
{  
    //   
    public class studentSource  
    {  
        public string Sname { get; set; }  
        public int Sage {get;set;}  
        public string Ssex { get; set; }  
    }  
}</span> 
DTO 엔티티
<span style="font-size:18px;">namespace testautomapper  
{  
    //   
    public class studentPurpost  
    {  
        public string Pname { get; set; }  
        public string Page { get; set; }  
        public string Psex { get; set; }  
    }  
}</span>  
솔리드 변환
AutoMapper는 ConstructUsing을 사용하여 각 필드에 대한 매핑 규칙을 지정합니다.
<span style="font-size:18px;"><span style="font-size:18px;">namespace testautomapper  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //   , (Model), (DTO)
            Mapper.CreateMap<studentSource, studentPurpost>();  
            // , 
            
            map.ConstructUsing(s => new studentPurpost
                                          {  
                                              Pname= s.Sname,  
                                              Page= s.Sage,  
                                              Psex= s.Ssex
                                          }); 
            //   
            studentSource sSource = new studentSource  
            {  
                Sname = " ",  
                age = 23,  
                sex = " "  
            };  
            //   , (DTO)
            var sPurpost = Mapper.Map<studentPurpost>(sSource);  
            Console.WriteLine(sPurpost.name + sPurpost.sex + sPurpost.age);  // 
        }  
    }  
</span>}</span> 
여기 괜찮아요.
ForMember, 하나하나 실체 속성을 대응하지만 귀찮아서 쓰지 않겠습니다.
편집자 메시지: 이번 설명을 통해 우리는 AutoMapper가 실체 전환 모델이라는 것을 알게 되었다. 그는 두 개의 동일하거나 같지 않은 실체를 서로 전환할 수 있고 두 개의 실체 집합을 전환할 수 있다. 물론 AutoMapper의 기능은 이뿐만이 아니다. 그의 더 많은 기능은 우리가 더 잘 알아야 한다.사실 우리는 실제 업무에서 AutoMapper로 전환할 필요가 없다. 단지 우리가 사용한 후에 일이 매우 간단해질 뿐이다. 그래서 우리는 임무를 완성해야 할 뿐만 아니라 임무를 완성하는 효율도 높여야 한다. 그러면 우리는 많이 듣고 많이 읽으며 식견도 넓혀야 기존의 지식을 충분히 활용하고 우리의 삶의 질을 향상시킬 수 있다.

좋은 웹페이지 즐겨찾기