【C#/.NET】使用Automapper對映record型別

2023-06-29 21:00:38

        當使用Automapper進行物件對映時,通常我們會使用POCO(Plain Old CLR Object)類作為源物件和目標物件。然而,自從C# 9引入了record型別,它們提供了更簡潔、不可變的物件模型。我已經將專案的所有Dto都是用record型別,但是record型別還是有些需要注意的點,本文將介紹如何使用Automapper將POCO對映成record的物件。

        首先,我們需要確保已經安裝了Automapper NuGet包。可以通過NuGet包管理器控制檯或者Visual Studio的NuGet包管理器來安裝

//安裝Nuget包
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection

//服務註冊
builder.Services.AddAutoMapper(assembly);  //你的程式集

 

        安裝完成後,我們可以在專案中引入Automapper的名稱空間,以便在程式碼中使用Automapper相關的功能。

        接下來,假設我們有一個POCO類Person,具有以下屬性:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

 

        現在,我們希望將這個POCO類對映成一個record型別的物件PersonRecord,具有相同的屬性:

public record PersonRecord(string FirstName, string LastName, int Age);

 

        在使用Automapper之前,我們需要進行一些設定。可以在應用程式的啟動程式碼或啟動器類中進行設定。以下是一個簡單的設定範例:

 public class PersonProfile : Profile
 {
     public PersonProfile()
     {
         CreateMap<Person, PersonRecord>();
     }
 }

 

        在上面的程式碼中,我們建立了一個PersonProfile類,並使用CreateMap方法來定義從Person到PersonRecord的對映。

        現在,我們可以使用mapper物件來執行對映操作了。只需呼叫mapper.Map方法並傳入源物件即可:

public class AutomapperController : ControllerBase
  {
      private readonly IMapper _mapper;

      public AutomapperController(IMapper mapper)
      {
          _mapper = mapper;
      }

      [HttpGet]
      public IActionResult Get()
      {
          Person person = new()
          {
              FirstName = "John",
              LastName = "Doe",
              Age = 30
          };

          PersonRecord personRecord = _mapper.Map<PersonRecord>(person);
          return Ok(personRecord);
      }
  }

 

        通過上面的程式碼,我們就將Person物件對映成了PersonRecord物件。personRecord物件將具有與person相同的屬性值。

        值得注意的是,由於record是不可變的,因此我們只能在建立時初始化其屬性,無法在後續程式碼中修改屬性值。因此,在對映過程中,Automapper會自動為record型別的目標物件生成一個建構函式,並根據源物件的屬性值進行初始化。

        使用Automapper進行POCO到record的對映還可以處理複雜的場景,包括巢狀物件、集合型別等。只需在設定過程中定義適當的對映規則,Automapper會自動處理屬性的對映。

        我們瞭解了使用Automapper將POCO對映成record的物件的步驟。首先,我們需要安裝和設定Automapper,然後定義對映規則。最後,在需要進行對映的地方呼叫mapper.Map方法即可。這樣,我們可以輕鬆地將POCO物件轉換為不可變的record物件。