我如何使用automapper更新另一个对象的属性值而不创建一个新的?
当前回答
这里有两件事需要注意。首先,我们不必为泛型map调用指定要映射到的类型。这是因为,现在我们正在传递目标对象实例,因此目标类型可以由该对象的类型确定。其次,我们没有将此调用的结果存储在变量中。这是因为目标对象被映射到合适的位置,并且我们没有创建任何新实例。
AutoMapper.Mapper.Map(sourceObject, destinationObject);
其他回答
如果您希望使用IMapper的实例方法,而不是接受的答案中使用的静态方法,您可以执行以下操作(在AutoMapper 6.2.2中测试)
IMapper _mapper;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Source, Destination>();
});
_mapper = config.CreateMapper();
Source src = new Source
{
//initialize properties
}
Destination dest = new dest
{
//initialize properties
}
_mapper.Map(src, dest);
Dest现在将使用它共享的来自SRC的所有属性值进行更新。其独特属性的值将保持不变。
这里是相关的源代码
要做到这一点,你必须创建源和目标类型的CreateMap,即使它们是相同的类型。 意思是如果你想 映射器。映射<用户,用户>(user1, user2); 你需要像这样创建地图 映射器。创建<用户、用户> ()
使用接收现有目的地的重载:
Mapper.Map<Source, Destination>(source, destination);
是的,它返回目标对象,但这只是用于其他一些模糊的场景。这是同一个物体。
这里有两件事需要注意。首先,我们不必为泛型map调用指定要映射到的类型。这是因为,现在我们正在传递目标对象实例,因此目标类型可以由该对象的类型确定。其次,我们没有将此调用的结果存储在变量中。这是因为目标对象被映射到合适的位置,并且我们没有创建任何新实例。
AutoMapper.Mapper.Map(sourceObject, destinationObject);
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 为什么Visual Studio 2015/2017/2019测试运行器没有发现我的xUnit v2测试
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 没有ListBox。SelectionMode="None",是否有其他方法禁用列表框中的选择?
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何在iis7应用程序池中设置。net Framework 4.5版本