gpt4 book ai didi

c# - 如何使用AutoMapper?

转载 作者:太空狗 更新时间:2023-10-29 21:36:49 24 4
gpt4 key购买 nike

第一次使用 AutoMapper,我很难搞清楚如何使用它。我正在尝试将 ViewModel 映射到我的数据库表。

我的 ViewModel 看起来像这样......

public class AddressEditViewModel
{
public AddressEdit GetOneAddressByDistrictGuid { get; private set; }
public IEnumerable<ZipCodeFind> GetZipCodes { get; private set; }

public AddressEditViewModel(AddressEdit editAddress, IEnumerable<ZipCodeFind> Zips)
{
this.GetOneAddressByDistrictGuid = editAddress;
this.GetZipCodes = Zips;
}
}

我尝试使用的映射是...

CreateMap<Address, AddressEditViewModel>();  

当我运行这个测试时...

public void Should_map_dtos()
{
AutoMapperConfiguration.Configure();
Mapper.AssertConfigurationIsValid();
}

我收到这个错误...

AutoMapper.AutoMapperConfigurationException: The following 2 properties on JCIMS_MVC2.DomainModel.ViewModels.AddressEditViewModel are not mapped: GetOneAddressByDistrictGuid GetZipCodes Add a custom mapping expression, ignore, or rename the property on JCIMS_MVC2.DomainModel.Address.

我不确定我应该如何映射这 2 个属性。我将不胜感激任何方向。谢谢

标记

最佳答案

好吧,我可以看到您正在做的一些事情可能无济于事。

首先,此 AutoMapper 用于将一个对象中的属性复制到差异对象中的属性。在此过程中,它可能会询问或操纵它们以获得处于正确状态的最终结果 View 模型。

  1. 这些属性被命名为“Get...”,这对我来说更像是一种方法。
  2. 您属性上的 setter 是私有(private)的,因此 AutoSetter 将无法找到它们。将这些更改为最小内部。
  3. 当您使用 AutoMapper 时,不再需要使用参数化构造函数 - 因为您是直接从一个对象转换为另一个对象。参数化构造函数主要用于显示此对象明确要求的内容。

    CreateMap<Address, AddressEditViewModel>()
    .ForMember( x => x.GetOneAddressByDistrictGuid ,
    o => o.MapFrom( m => m."GetOneAddressByDistrictGuid") )
    .ForMember( x => x.GetZipCodes,
    o => o.MapFrom( m => m."GetZipCodes" ) );

Automapper 真正擅长的是从 DataObjects 复制到 POCO 对象或 View Model 对象。

    public class AddressViewModel
{
public string FullAddress{get;set;}
}

public class Address
{
public string Street{get;set;}
public string Suburb{get;set;}
public string City{get;set;}
}

CreateMap<Address, AddressViewModel>()
.ForMember( x => x.FullAddress,
o => o.MapFrom( m => String.Format("{0},{1},{2}"), m.Street, m.Suburb, m.City ) );

Address address = new Address(){
Street = "My Street";
Suburb= "My Suburb";
City= "My City";
};

AddressViewModel addressViewModel = Mapper.Map(address, Address, AddressViewModel);

关于c# - 如何使用AutoMapper?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com