排名
12
文章
74
粉丝
4
评论
15
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术
原
AutoMapper 配置忽略,配置对象可以为空。AutoMapper对象如果不为空则映射。解决AutoMapper自动创建对象。AutoMapper自动new ef的导航属性对象。AutoMapper中写为空判断。基础的单项映射,双向映射

基础的单向配置与双向配置
单向配置
// 单项映射
CreateMap<Menu,MenuMetaDto>();
双向配置
// 双向映射
CreateMap<MenuDto, Menu>().ReverseMap();
AutoMapper 配置忽略 (找不到映射的时候会报错)
有些时候如果对象字段多了没有找到映射的对象就会报错,所以需要配置成忽略的
//忽略属性
CreateMap<EmployeeArchivesDto, EmployeeArchives>()
.ForMember(dest => dest.UserInfo, opt => opt.Ignore())
.ForMember(dest => dest.ArchivesType, opt => opt.Ignore());
AutoMapper 配置对象可以为空
CreateMap<EmployeeArchivesDto, EmployeeArchives>()
.ForMember(dest => dest.UserInfo, opt => opt.AllowNull())
.ForMember(dest => dest.ArchivesType, opt => opt.AllowNull());
如果字段名字不一样,可以这样配置映射关系,指定字段映射
CreateMap<JToken, SchedulHeadViewModel>()
.ForMember(dest => dest.HospitalId,
options => options.MapFrom(c => c.SelectToken("Hospital_ID")))
.ForMember(dest => dest.BranchId,
options => options.MapFrom(c => c.SelectToken("Branch_ID")))
.ForMember(dest => dest.SchedulId,
options => options.MapFrom(c => c.SelectToken("ScheduHeadID")));
现在比较新版一点的换成下面这种写法了:
CreateMap<Menu, MenuMetaDto>()
.ForMember(dest => dest.RolesTemp, opt => opt.MapFrom(src => src.Roles));
忽略字段和指定字段映射配合起来用
// 单向映射,并且指定了字段映射的
CreateMap<Menu, MenuMetaDto>()
// 忽略字段,找不到映射的时候会报错
.ForMember(dest => dest.Roles, opt => opt.Ignore())
.ForMember(dest => dest.RolesTemp, opt => opt.MapFrom(src => src.Roles));
如果想要取子对象数据的映射可以这样配置
CreateMap<EmployeeArchives, EmployeeArchivesDto>()
.ForMember(dest => dest.UserName, opt => opt.MapFrom(src => src.UserInfo.UserName))
.ForMember(dest => dest.ArchivesTypeName, opt => opt.MapFrom(src => src.ArchivesType.archives_type_name))
.ReverseMap();
但是这里要注意的,就是这里使用了ReverseMap,是双向映射,这里边使用了导航属性的赋值,src.ArchivesType.xxx和src.UserInfo.xx,这种虽然查询的时候没有问题,但是如果是添加的时候,也就是从EmployeeArchivesDto映射到EmployeeArchives的时候会自动new对象
就会有问题,就会自动去添加外键了。
解决方法就是两个映射单独配置,就不会相互影响了,复杂情况下双向很容易出错
dto到ef实体的映射也就是EmployeeArchivesDto到EmployeeArchives的映射就直接配置一个简单的映射就行,不会设置到子对象的赋值
CreateMap<EmployeeArchivesDto, EmployeeArchives>();
然后ef实体到dto的映射,就涉及到子对象的取值赋值了,注意这里就不需要调用ReverseMap()
了
CreateMap<EmployeeArchives, EmployeeArchivesDto>()
.ForMember(dest => dest.UserName, opt => opt.MapFrom(src => src.UserInfo.UserName))
.ForMember(dest => dest.ArchivesTypeName, opt => opt.MapFrom(src => src.ArchivesType.archives_type_name));
还有一种解决方法就是写成双向,然后加一点判断
CreateMap<EmployeeArchivesDto, EmployeeArchives>();
CreateMap<EmployeeArchives, EmployeeArchivesDto>()
.AfterMap((src, dst) =>
{
if (src.UserInfo != null)
{
dst.UserName = src.UserInfo.UserName;
}
if (src.ArchivesType != null)
{
dst.ArchivesTypeName = src.ArchivesType.archives_type_name;
}
});
两种方法大家都可以根据不同情况去尝试一下!
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价