自动映射-它可以只映射源对象和目标对象中的现有属性吗?我有一个简单的更新功能:publicvoidUpdate(Usersuser){tblUserDatauserData=_context.tblUserDatas.Where(u=>u.IDUSER==user.IDUSER).FirstOrDefault();if(userData!=null){Mapper.CreateMap();userData=Mapper.Map(用户);_context.SaveChanges()}}userData是一个EF实体,它的EntityKey属性被取消了,因为我相信它存在于目标对象中,但它不存在于源对象中,所以它将使用它的默认值进行映射(对于EntityKey,itisnull)那么,我的问题是,能否将Automapper配置为仅尝试映射同时存在于源对象和目标对象中的属性?我想跳过实体键和导航属性之类的东西。如果需要,您可以明确告诉AutoMapper忽略某些属性,如下所示:Mapper.CreateMap().ForMember(dest=>dest.Id,opt=>opt.Ignore());这意味着目标对象列中的Id始终保持不变。您可以使用Condition选项指定是否应用地图,具体取决于逻辑条件的结果,如下所示:Mapper.CreateMap().ForMember(dest=>dest.Id,opt=>opt.Condition(src=>src.Id.HasValue));或Mapper.CreateMap().ForMember(dest=>dest.Id,opt=>opt.Condition(src=>src.Id!=null));根据您的具体要求。您可以告诉AutoMapper忽略您不想映射的字段,如下所示:userData=Mapper.Map(user).ForMember(m=>m.EntityKey,opt=>opt.Ignore());为此,您可以使用一个小型扩展方法来覆盖此行为,方法是忽略目标类型上不存在的所有属性。publicstaticIMappingExpressionIgnoreAllNonExisting(这个IMappingExpression表达式){varsourceType=typeof(TSource);vardestinationType=typeof(TDestination);varexistingMaps=Mapper.GetAllTypeMaps().First(x=>x.SourceType.Equals(sourceType)&&x.DestinationType.Equals(destinationType));foreach(varpropertyinexistingMaps.GetUnmappedPropertyNames()){expression.ForMember(property,opt=>opt.Ignore());}返回表达式;然后可以按如下方式完成映射:Mapper.CreateMap().IgnoreAllNonExisting();也可以根据需要自定义此方法,例如通过专门忽略具有受保护或私有设置器的属性。以上是C#学习教程:自动映射——能否只映射源对象和目标对象中已有的属性?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
