asp.net-core - EF Core 和 Automapper。一对多映射关系
问题描述
我目前在运行代码优先实体框架的项目上使用 AutoMapper。
这里只是简单的实体和 DTO:
// DTO Profile
public class CreateOrEditProfileDto
{
public string Code { get; set; }
public string Name { get; set; }
public List<RouteDto> Routes { get; set; }
}
// entity Profile
public class Profile
{
public virtual string Code { get; set; }
public virtual string Name { get; set; }
}
// DTO Route
public class RouteDto
{
public string DriverName { get; set; }
public string DriverSurname { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public int ProfileId { get; set; }
}
//entity Route
public class Route
{
public virtual string DriverName { get; set; }
public virtual string DriverSurname { get; set; }
public virtual string Phone { get; set; }
public virtual string Email { get; set; }
public virtual int ProfileId { get; set; }
[ForeignKey("ProfileId")]
public Profile ProfileFk { get; set; }
}
//Mapper
configuration.CreateMap<RouteDto, Route>().ReverseMap();
// configuration.CreateMap<CreateOrEditProfileDto, Profile>().ReverseMap();
// this type of configuration give the error written below
configuration.CreateMap<CreateOrEditProfileDto, Profile>()
.ForMember(dest => dest, opt =>
opt.MapFrom(src => src.Routes.Select(x =>
new Route()
{
ProfileId = x.ProfileId,
DriverName = x.DriverName,
DriverSurname = x.DriverSurname,
Phone = x.Phone,
Email = x.Email,
}
)
)
);
我有点困惑,我试图映射 Profile 和 Route 之间的一对多关系,Route 有一个 Profile 的外键。一个配置文件可以有更多的路线。所以,我想创建一个配置文件并附加路由列表,但是当我编译解决方案时,我收到了这个错误:
AutoMapper.AutoMapperConfigurationException:“成员的自定义配置仅支持类型上的顶级个人成员。”
有谁知道解决此映射的最佳方法?
问候
解决方案
因为List<RouteDto>
被映射到Profile
,所以类型不匹配。您需要在Profile
.
public class Profile
{
public virtual string Code { get; set; }
public virtual string Name { get; set; }
public List<Route> Routes { get; set; }
}
dest.Routes
需要指定映射属性。然后,Routes
将自动映射。
CreateMap<CreateOrEditProfileDto, EntityProfile>()
.ForMember(dest => dest.Routes, opt =>
opt.MapFrom(src => src.Routes.Select(x=>
new Route()
{
ProfileId = x.ProfileId,
DriverName = x.DriverName,
DriverSurname = x.DriverSurname,
Phone = x.Phone,
Email = x.Email,
}
))
);
推荐阅读
- java - 带有各种分隔符的 Spark CSV 到 DataSet
- python - Python, Requests: 使用 Requests, Python 帮助在本网站上提交表单
- python - 将两个列表转换为字典错误
- c - #define 的优点而不是在嵌入式中创建函数
- wordpress - 使用管道联系表格 7 可选收件人 - 多封电子邮件
- java - Spring Batch - ORA 12516 SQLState 66000 - TNS:Listener 无法使用具有匹配协议堆栈的处理程序
- python - 汇总 Pandas 时间戳
- python - 用 conda-forge 包替换 pip 包的简单方法
- html - 隐藏一个gridview应该自动调整相邻gridview的大小
- javascript - Javascript 分配和删除属性