仅更新映射的字段或忽略未映射的字段-自动映射?

时间:2019-09-29 11:39:06

标签: c# .net oracle entity-framework automapper

我是Automapper的新手,在更新映射字段时遇到困难。我必须同意,互联网上对此问题有数以百万计的答案,但是这个问题对我的情况没有帮助。

问题: 我正在尝试仅更新映射的字段。但是当我这样做时,我的完整目标属性就会更新。

例如,

  

我的目标对象(数据库表)拥有5个属性,所有5个属性   属性接受null。但是我只有3个属性   源(模型文件)。我正在将所有三个源字段与   目标字段,但我没有映射其余两个字段   目标属性。您会猜对的,是的,当   我对此进行了更新,两个未映射的字段也正在更新为null(默认值-DB)。但它   应该不是这种情况,而是应该具有现有值。

请在下面查看我的代码

参考: Automapper版本:v6.2.2和运行时版本:v4.0.3

Repository.cs,

var objectToUpdate = Mapper.Map<TDomain>(entity); //TDestination Map<TDestination>(object source);
DatabaseContext.Entry(objectToUpdate).State = EntityState.Modified;

InvoiceLineMapping.cs

public static void Map(IProfileExpression profile)
    {                     
                profile.CreateMap<Registration, PT_Registration>()
                .ForMember(d => d.Name_VC, map => map.MapFrom(s => s.Name))
                .ForMember(d => d.UserName_VC, map => map.MapFrom(s => s.Username))
                .ForMember(d => d.Mobile_VC, map => map.MapFrom(s => s.Mobile));
     }

注意:如前所述,目标中有两个未映射的字段,分别为EMail_VC和Comments_VC,其值分别为sample@test.com和testComments。更新发生时,这两个字段将为空(默认值)

我尝试过,

  • .ForAllOtherMembers(opt => opt.Ignore()); //在最后一个映射(即移动设备)之后
  • profile.CreateMap(MemberList.Source)//我也尝试了MemberList.Destination
  • 我还尝试了AutoMapper: "Ignore the rest"?扩展方法,
  • 我最后尝试了puttin ReverseMap()。 //在最后一个映射(即移动设备)之后
  • 我什至试图找到空值并从目标对象中删除(objectToUpdate-您可以在上面看到),但没有任何帮助。

所以有人可以调查一下并为我提供更好的解决方案。我知道解决方案会更简单,但是由于我不了解,它会花费越来越多的时间。

感谢您的宝贵时间。任何帮助都会大有帮助。

0 个答案:

没有答案
相关问题