加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – AutoMapper – 如何映射到三级深度

发布时间:2020-12-15 22:20:40 所属栏目:百科 来源:网络整理
导读:我正在尝试使用AutoMapper来压缩与另一个实体相关的实体,该实体与第三个实体有关,以查看模型 如何将这三个实体合二为一? 资源: public class Address{ public int AddressId { get; set; } public string AddressLine1 { get; set; } public int CityId {
我正在尝试使用AutoMapper来压缩与另一个实体相关的实体,该实体与第三个实体有关,以查看模型

如何将这三个实体合二为一?

资源:

public class Address
{
    public int AddressId { get; set; }
    public string AddressLine1 { get; set; }       
    public int CityId { get; set; }
    public virtual City City { get; set; }  
}

public class City
{
    public int CityId { get; set; }
    public string CityName { get; set; }
    public int CountryId { get; set; }
    public virtual Country Country { get; set; }

    public virtual ICollection<Address> Addresses { get; set; }
}
public class Country
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
    public virtual ICollection<City> Cities { get; set; }
}

目的地:

Public Class AddressViewModel
{
    public int AddressId { get; set; }
    public string AddressLine1 { get; set; }       
    public int CityId { get; set; }
    public string CityName { get; set; }
    public int CountryId { get; set; }
    public string CountryName { get; set}
}

解决方法

有两种方式(至少).如果以不同的方式命名viewmodel字段,则可以按惯例进行:

Public Class AddressViewModel
{
    public int AddressId { get; set; }
    public string AddressLine1 { get; set; }       
    public int CityCityId { get; set; }
    [DisplayName("City Name")]
    public string CityCityName { get; set; }
    public int CityCountryCountryId { get; set; }
    [DisplayName("Country Name")]
    public string CityCountryCountryName { get; set}
}

如果那太难看了,你可以在CreateMap中做到:

Mapper.CreateMap<Address,AddressViewModel>()
    .ForMember(dest => dest.CityId,opts => opts.MapFrom(src => src.City.CityId))
    .ForMember(dest => dest.CityName,opts => opts.MapFrom(src => src.City.CityName))
    .ForMember(dest => dest.CountryId,opts => opts.MapFrom(src => src.City.Country.CountryId))
    .ForMember(dest => dest.CountryName,opts => opts.MapFrom(src => src.City.Country.CountryName));

http://automapper.codeplex.com/wikipage?title=Flattening&referringTitle=Home

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读