ASP.NET Core Web API使用EF映射DTO丢失一对一关联对象求助
问题原因及解决方案
导致映射后关联对象为null的核心是AutoMapper的映射规则不匹配,按以下步骤修复即可:
- 修正DTO导航属性命名
AutoMapper默认按属性名严格匹配映射关系,你当前定义的UserAccountDto中两个关联属性命名和实体不匹配:
- 实体导航属性为
UserAccountType,DTO中写为UserAccountTypes(多了后缀s) - 实体导航属性为
Truck,DTO中写为Trucks(多了后缀s)
修正后的DTO关联属性定义如下:
// Linked Objects public virtual GenderDto Gender { get; set; } public virtual UserAccountTypeDto UserAccountType { get; set; } public virtual TruckDto Truck { get; set; }
同时建议将DTO中的TruckId改为int?类型,和实体的可空属性保持一致,避免空值映射异常:
public int? TruckId { get; set; }
- 补全AutoMapper嵌套类型映射配置
所有参与映射的类型都需要在AutoMapper的Profile中显式注册映射规则,除了UserAccount到UserAccountDto的映射外,还需要补充三个关联类型的映射:
// 在你的AutoMapper Profile类的构造方法中添加以下配置 CreateMap<Gender, GenderDto>(); CreateMap<UserAccountType, UserAccountTypeDto>(); CreateMap<Truck, TruckDto>();
完成以上两步修改后重新运行项目,即可正常映射关联对象。
内容的提问来源于stack exchange,提问作者Paintbox
相关产品推荐
相关产品推荐

