中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解.NET Core Dto映射

發布時間:2021-11-08 18:29:58 來源:億速云 閱讀:179 作者:柒染 欄目:建站服務器

如何理解.NET Core Dto映射,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

我們假設一個場景, 采用EF Core+Web Api, 這時候可能會出現EF Core中的Entity Model和在項目中使用的Model之間對應關系出現偏差, 如果使用屬性意一一對應, 不免會有大量的工作量

好了,接下來直接上代碼來說明。

EntityModels.Employee.cs

public class Employee
{
    public Guid Id { get; set; }
    public Guid CompanyId { get; set; }
    public string EmployeeNo { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Gender Gender { get; set; }
    public DateTime DateOfBirth { get; set; }
    public Company Company { get; set; }
}

Models.EmployeeDto.cs

public class EmployeeDto
{
    public Guid Id { get; set; }
    public Guid CompanyId { get; set; }
    public string EmployeeNo { get; set; }
    public string Name { get; set; }
    public string GenderDisplay { get; set; }
    public int Age { get; set; }
}

我們可以觀察到, 兩個實體之間有很多不同的地方, 比如名字拆分啊, 出生日期和年齡啊等等, 我之前的做法就是硬生生手寫代碼轉換, 但是經過學習大佬們的代碼, 發現了一個類庫, 在此算是記錄一下吧

AutoMapper.Extensions.Microsoft.DependencyInjection

可以通過NuGet安裝,使用的時候也非常簡單, 建立Profile文件夾, 新建一個EmployeeProfile類, 繼承于Profile。

public class EmployeeProfile: Profile
{
    public EmployeeProfile()
    {
        CreateMap()
            .ForMember(dest => dest.Name,
                opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
            .ForMember(dest => dest.GenderDisplay,
                opt => opt.MapFrom(src => src.Gender.ToString()))
            .ForMember(dest => dest.Age,
                opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year));
    }
}

在使用的時候只需要這樣, 注入mapper, 然后就是很簡單的操作了, 簡直了, 功能非常強大!!!

[ApiController]
[Route("api/companies/{companyId}/employees")]
public class EmployeesController: ControllerBase
{
    private readonly IMapper _mapper;
    private readonly ICompanyRepository _companyRepository;
    public EmployeesController(IMapper mapper, ICompanyRepository companyRepository)
    {
        _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
        _companyRepository = companyRepository ?? throw new 
            ArgumentNullException(nameof(companyRepository));
    }
    [HttpPost]
    public async Task<1actionresult>
        CreateEmployeeForCompany(Guid companyId, EmployeeAddDto employee)
    {
        if (!await _companyRepository.CompanyExistsAsync(companyId))
        {
            return NotFound();
        }
        var entity = _mapper.Map(employee);
        _companyRepository.AddEmployee(companyId, entity);
        await _companyRepository.SaveAsync();
        var dtoToReturn = _mapper.Map(entity);
        return CreatedAtRoute(nameof(GetEmployeeForCompany), new
        {
            companyId = companyId,
            employeeId = dtoToReturn.Id
        }, dtoToReturn);
    }
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

dto
AI

贡觉县| 江源县| 视频| 报价| 黄骅市| 磴口县| 新龙县| 德化县| 三门县| 石楼县| 韩城市| 巴青县| 三明市| 阿勒泰市| 长白| 旺苍县| 邯郸县| 赤水市| 灌云县| 云安县| 涿州市| 肇源县| 达州市| 交城县| 娄烦县| 南康市| 遂平县| 鄂托克前旗| 南安市| 肥城市| 灵台县| 合肥市| 合山市| 聂拉木县| 刚察县| 凤冈县| 改则县| 马山县| 乐山市| 烟台市| 喀什市|