亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何理解.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

抚州市| 莱西市| 平武县| 湛江市| 丰宁| 张家港市| 镶黄旗| 新化县| 札达县| 永平县| 玉田县| 启东市| 呼伦贝尔市| 武定县| 柘荣县| 民和| 藁城市| 陵水| 南通市| 宝鸡市| 通河县| 通许县| 郁南县| 黄大仙区| 舞钢市| 义乌市| 惠水县| 贡山| 岳西县| 济南市| 开原市| 佛山市| 肇庆市| 晋宁县| 浦县| 台中市| 新源县| 肇东市| 西昌市| 朔州市| 获嘉县|