Csharp/C#教程:AutoMapper – 使用相同的源和目标对象类型映射分享


AutoMapper – 使用相同的源和目标对象类型映射

我正在使用Automapper来获取两个相同类型的对象,并映射已更改的任何新值。 我尝试使用下面的代码,但它不断抛出错误,我甚至不确定这是否可以通过Automapper实现。

例如:

Mapper.CreateMap(); UserDetails userDetails = Mapper.Map(userDetailsCurrent, userDetailsNew); 

基本上,我需要将来自新对象“userDetailsNew”的任何新值复制到现有对象“userDetailsCurrent” – 即使它们属于同一类型。 这样我就可以用新值“更新”现有对象。 我这样做的原因是因为我不确定将传递哪些用户详细信息 – 我需要在它们到达时映射它们。

我通常使用Automapper来映射具有相似属性的不同对象 – 但我认为我可以利用Automapper的强大function以这种方式实现相同的function。 甚至可能有更好的解决方案 – 任何帮助将不胜感激!

这似乎对我有用。 我的自定义类型:

 class MyType { public int MyInt { get; set; } public string MyString { get; set; } } 

我的映射代码:

 Mapper.CreateMap(); var source = new MyType() {MyInt = 1, MyString = "Hello world"}; var dest = Mapper.Map(source); 

除了简单属性之外,您的自定义类型有什么意义?

这可以使用元组和创建从Automapper的Abstract TypeConverter类派生的自定义类型转换器来完成。

假设您有源和目标类:

 public class Person { public string FirstName { get; set; } public string LastName { get; set; } public override string ToString() { return string.Format("Firstname: {0}, Lastname: {1}", FirstName, LastName); } } 

然后你可以构建自定义转换器类型

 public class CustomerPersonConverter : TypeConverter, Person> { protected override Person ConvertCore(Tuple source) { var orginalValues = source.Item1; var updatedValues = source.Item2; var result = new Person { FirstName = string.IsNullOrEmpty(updatedValues.FirstName) ? orginalValues.FirstName : updatedValues.FirstName, LastName = string.IsNullOrEmpty(updatedValues.LastName) ? orginalValues.LastName : updatedValues.LastName }; return result; } } 

可以像

 var orginal = new Person() {FirstName = "Clifford", LastName = "Mayson"}; var updated = new Person() {FirstName = "Cliff"}; Mapper.CreateMap, Person>().ConvertUsing(); var result = Mapper.Map(new Tuple(orginal, updated)); Console.WriteLine(result); 

这将产生保持原始姓氏值的结果,因为更新中缺少原始姓氏值,但更新名字大全值,例如。

上述就是C#学习教程:AutoMapper – 使用相同的源和目标对象类型映射分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 Firstname: Cliff, Lastname: Mayson 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1015137.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐