C#使用AutoMapper進(jìn)行對象映射的示例代碼
引言
AutoMapper 是一個(gè)對象到對象映射的庫,可以簡化 DTO (Data Transfer Objects) 和實(shí)體類之間的轉(zhuǎn)換。在大型應(yīng)用程序中,通常需要將業(yè)務(wù)實(shí)體映射到視圖模型或 DTO 中,這樣可以減少代碼的重復(fù)性并提高可維護(hù)性。本文將詳細(xì)介紹如何在 C# 項(xiàng)目中使用 AutoMapper,包括安裝、配置、以及示例代碼。
一、安裝 AutoMapper
首先,需要在項(xiàng)目中安裝 AutoMapper,可以使用 NuGet Package Manager 進(jìn)行安裝。
在 Visual Studio 中打開 NuGet 包管理控制臺,然后運(yùn)行以下命令:
Install-Package AutoMapper
或者通過 NuGet 管理器搜索 AutoMapper 并進(jìn)行安裝。
二、配置 AutoMapper
安裝完成后,需要配置 AutoMapper。通常在應(yīng)用程序啟動時(shí)配置,可以在 ASP.NET Core 的 Startup 類中配置,或在普通的控制臺應(yīng)用程序的入口處配置。
定義模型和 DTO
讓我們首先定義一個(gè)簡單的模型類和對應(yīng)的 DTO 類。
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class UserDto
{
public int Id { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
}
創(chuàng)建映射配置
接下來,我們需要配置對象之間的映射關(guān)系。在 ASP.NET Core 項(xiàng)目中,可以在 Startup.cs 文件中進(jìn)行配置。在控制臺應(yīng)用程序中,可以在 Main 方法中進(jìn)行配置。
using AutoMapper;
using System;
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
// 配置映射關(guān)系
CreateMap<User, UserDto>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
.ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year));
}
}
在上面的代碼中,我們定義了一個(gè) AutoMapperProfile 類,它繼承自 Profile,并在構(gòu)造函數(shù)中配置了 User 和 UserDto 之間的映射關(guān)系。
初始化 AutoMapper
然后,我們需要在應(yīng)用程序啟動時(shí)初始化 AutoMapper。
在 ASP.NET Core 中,可以在 Startup.cs 中配置:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(typeof(Startup));
}
}
在控制臺應(yīng)用程序中,可以在 Main 方法中初始化:
class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<AutoMapperProfile>();
});
IMapper mapper = config.CreateMapper();
// 測試映射
var user = new User
{
Id = 1,
FirstName = "John",
LastName = "Doe",
DateOfBirth = new DateTime(1990, 1, 1)
};
var userDto = mapper.Map<UserDto>(user);
Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");
}
}
在上面的代碼中,我們創(chuàng)建了 MapperConfiguration 并添加了我們剛才創(chuàng)建的 AutoMapperProfile。然后,通過 CreateMapper 方法創(chuàng)建一個(gè) IMapper 實(shí)例,并使用它來執(zhí)行映射操作。
三、使用 AutoMapper
有了上述配置后,就可以使用 AutoMapper 進(jìn)行對象映射了。以下是一個(gè)簡單的示例:
var user = new User
{
Id = 1,
FirstName = "John",
LastName = "Doe",
DateOfBirth = new DateTime(1990, 1, 1)
};
var userDto = mapper.Map<UserDto>(user);
Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");
運(yùn)行該代碼后,將輸出:
Id: 1, FullName: John Doe, Age: 34
AutoMapper 自動將 User 對象映射到 UserDto 對象,并且根據(jù)配置生成了 FullName 和 Age 的值。
四、總結(jié)
通過以上示例,您已經(jīng)學(xué)習(xí)了如何在 C# 中使用 AutoMapper 進(jìn)行對象映射。AutoMapper 是一個(gè)非常強(qiáng)大的工具,它可以減少手動編寫映射代碼的工作量,特別是在復(fù)雜項(xiàng)目中更是如此。希望本文對您有所幫助!
完整代碼示例:
using AutoMapper;
using System;
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class UserDto
{
public int Id { get; set; }
public string FullName { get; set; }
public int Age { get; set; }
}
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<User, UserDto>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
.ForMember(dest => dest.Age, opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year));
}
}
class Program
{
static void Main(string[] args)
{
var config = new MapperConfiguration(cfg =>
{
cfg.AddProfile<AutoMapperProfile>();
});
IMapper mapper = config.CreateMapper();
var user = new User
{
Id = 1,
FirstName = "John",
LastName = "Doe",
DateOfBirth = new DateTime(1990, 1, 1)
};
var userDto = mapper.Map<UserDto>(user);
Console.WriteLine($"Id: {userDto.Id}, FullName: {userDto.FullName}, Age: {userDto.Age}");
}
}
這段代碼可以直接復(fù)制到您的項(xiàng)目中并運(yùn)行,幫助您快速掌握 AutoMapper 的使用。
以上就是C#使用AutoMapper進(jìn)行對象映射的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C# AutoMapper對象映射的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#使用Exchange實(shí)現(xiàn)發(fā)送郵件
最近項(xiàng)目中需要用到exchange的操作,所以本文就參照msdn弄了一個(gè)簡單的C#操作類,實(shí)現(xiàn)了發(fā)送郵件和拉取收件箱的功能,感興趣的小伙伴可以了解下2023-10-10
C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫的方法
這篇文章主要介紹了C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫的方法,通過StreamReader類里的ReadLine()方法實(shí)現(xiàn)逐行讀取的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12
Parallel.For循環(huán)與普通for循環(huán)的性能比較
這篇文章介紹了Parallel.For循環(huán)與普通for循環(huán)的性能比較,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
C#實(shí)現(xiàn)appSettings節(jié)點(diǎn)讀取與修改的方法
這篇文章主要介紹了C#實(shí)現(xiàn)appSettings節(jié)點(diǎn)讀取與修改的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
ASP.NET MVC 5使用X.PagedList.Mvc進(jìn)行分頁教程(PagedList.Mvc)
這篇文章主要介紹了ASP.NET MVC 5使用X.PagedList.Mvc進(jìn)行分頁教程(原名為PagedList.Mvc),需要的朋友可以參考下2014-10-10

