AutoMapper กับขัอมูลชนิด Collection

การใช้งาน AutoMapper กับ object type array หรือ list ไม่จำเป็นต้องกำหนดค่า config การ map ของ array หรือ list เพียงแค่ config การ map ของ member ของ array หรือ list ที่ใช้งานเท่านั้น ตัวอย่างเช่น object ง่ายๆสองชนิดดังต่อไปนี้

public class Person
{
    public string name { get; set; }
}

public class Employee
{
   public string name { get; set; }
}

กำหนดค่า config ของ AutoMapper สำหรับการ map ข้อมูลจาก Person ไปยัง Employee

Mapper.Initialize(cfg => cfg.CreateMap<Person, Employee>());

var persons = new[]
{
   new Person  { Name = "A" },
   new Person  { Name = "B" },
   new Person  { Name = "C" }
};

AutoMapper สามารถใช้งานได้กับ generic collection type ดังนี้

  • IEnumerable
  • IEnumerable<T>
  • ICollection
  • ICollection<T>
  • IList
  • IList<T>
  • List<T>
  • Arrays

ในการทำ mapping ของ AutoMapper ถ้า collection ของ object ปลายทางที่ถูก map มี member อยู่แล้ว AutoMapper จะทำการ remove member ของ collection ปลายทางออกก่อน ที่จะทำการ mapping ข้อมูลจาก Object ต้นทาง

var enumEmployee = Mapper.Map<Person[], IEnumerable<Employee>>(persons);
var colEmployee = Mapper.Map<Person[], ICollection<Employee>>(persons);
var ilistEmployee = Mapper.Map<Person[], IList<Employee>>(persons);
var listEmployee = Mapper.Map<Person[], List<Employee>>(persons);
var arrayEmployee = Mapper.Map<Person[], Employee[]>(persons);

กรณีที่ collection ต้นทางที่ทำการ mapping มีค่าเป็น null, AutoMapper จะทำกำหนดค่าให้กับ collection ปลายทางเป็น empty collection ไม่ใช่ null collection เราสามารถเปลี่ยนค่า default โดยการกำหนดค่า AllowNullCollections = true ในตอน config mapper

Mapper.Initialize(cfg => {
    cfg.AllowNullCollections = true;
    cfg.CreateMap<Person, Employee>();
});

ในกรณีที่ collection ที่ต้องการ mapping มี member ที่มีลักษณะ hierarachy ก็สามารถใช้ AutoMapper ในการ mapping ข้อมูลได้เช่นกัน โดยกำหนด config ของ collection member โดยใช้ method Include หลังจาก config mapping ของ parent object แล้ว และเรียกใช้งาน Map ตามปกติ ดังนี้

public class ChildPerson : Person 
{
    public string JobName { get; set; }
}

public class ChildEmployee : Employee
{
   public string JobName { get; set; }
}


Mapper.Initialize(c=> 
{     c.CreateMap<Person, Employee>()        
          .Include<ChildPerson, ChildEmployee>();        
      c.CreateMap<ChildPerson, ChildEmployee>(); 
}); 

var persons = new[]
{
   new Person  { Name = "A" },
   new ChildPerson  { Name = "B" },
   new ChildPerson  { Name = "C" }
}; 

var enumEmployee = Mapper.Map<Person[], IEnumerable<Employee>>(persons);

อ้างอิง : http://docs.automapper.org/en/stable/Lists-and-arrays.html

Share the Post:

Related Posts

ทำความรู้จักกับ Outlook บนเว็บ

Post Views: 6 Outlook เป็นเครื่องมือจัดการอีเมลและปฏิทินที่ทรงพลัง ซึ่งช่วยให้คุณมีระเบียบและเพิ่มความสามารถในการทำงาน ด้วยอินเทอร์เฟซที่ใช้งานง่าย คุณสามารถจัดการกล่องขาเข้าของคุณ นัดหมาย และทำงานร่วมกับเพื่อนร่วมงานได้อย่างง่ายดาย ฟีเจอร์ที่แข็งแกร่งของ Outlook รวมถึงแม่แบบอีเมลที่ปรับแต่งได้ ความสามารถในการค้นหาขั้นสูง และการผสานรวมที่ไร้รอยต่อกับแอปพลิเคชัน Microsoft Office อื่นๆ ไม่ว่าคุณจะเป็นมืออาชีพที่ยุ่งอยู่หรือเป็นนักเรียนที่ต้องจัดการกับภารกิจหลายอย่าง Outlook

Read More

[บันทึกกันลืม] JupyterHub Authenticated with OIDC

Post Views: 36 ต่อจากตอนที่แล้ว [บันทึกกันลืม] JupyterHub ด้วย Docker คราวนี้ ถ้าต้องการให้ ยืนยันตัวตนด้วย OpenID เช่น PSU Passport เป็นต้น ก็ให้ทำดังนี้ ในไฟล์ jupyterhub_config.py ใส่

Read More