已解决:我的属性定义不正确!
我收到此错误... 缺少类型映射配置或不支持的映射。 映射类型: HouseDomain - > RoomDomain {namespace} .HouseDomain - > {namespace} .RoomDomain
目的地路径: City.Houses.Houses.Houses0 [0]
例如,我有
public class CityDomain
{
public IEnumerable<HouseDomain> DomainHouses {get;set;}
}
public class HouseDomain
{
public IEnumerable<RoomDomain> DomainRooms {get;set;}
}
public class RoomDomain
{
//whatever
}
和
public class CityDto
{
public IEnumerable<HouseDto> DtoHouses {get;set;}
}
public class HouseDto
{
public IEnumerable<RoomDto> DtoRooms {get;set;}
}
public class RoomDto
{
//whatever
}
所以我想将CityDomain映射到CityDto。我有......
Mapper.CreateMap<CityDomain , CityDto>();
是否存在像这样的2级深度问题?有帮助吗?谢谢!
答案 0 :(得分:4)
这是您需要的所有映射(如果创建了适当对象类型的映射,Automapper足够智能地映射对象列表):
Mapper.CreateMap<RoomDomain, RoomDto>();
Mapper.CreateMap<HouseDomain, HouseDto>()
.ForMember(d => d.DtoRooms, m => m.MapFrom(s => s.DomainRooms));
只需删除成员DtoRooms的第二个映射。例如。如果房子有id而房间有名字,那么对于样本域名房屋映射工作就好了:
HouseDomain domainHouse = new HouseDomain
{
Id = 42,
DomainRooms = new List<RoomDomain>
{
new RoomDomain { Name = "foo" },
new RoomDomain { Name = "bar" }
}
};
var dtoHouse = Mapper.Map<HouseDto>(domainHouse);
产地:
{
Id: 42,
DtoRooms: [ { Name: "foo" }, { Name: "bar" } ]
}
最后一点 - 确保在进行映射之前创建地图。通常所有地图都是在应用程序启动时创建的。
答案 1 :(得分:1)
如果您为Rooms
和HouseDomain
类型设置相同的集合名称(例如HouseDto
),则可以简化映射。
映射:
Mapper.CreateMap<RoomDomain, RoomDto>();
Mapper.CreateMap<HouseDomain, HouseDto>();
类型:
public class HouseDomain
{
public IEnumerable<RoomDomain> Rooms {get;set;}
}
public class HouseDto
{
public IEnumerable<RoomDto> Rooms {get;set;}
}
我刚才回答了类似问题AutoMapping nested models。