Kro*_*rol 6 c# asp.net-mvc automapper
我是AutoMapper的新手,除非我误解,否则AutoMapper在映射到Dto时应始终创建深层副本.然而,下面的测试代码告诉我它正在创建浅拷贝.我在这里错过了什么?
映射配置
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AutoMapper;
using Sandbox.Models;
namespace Sandbox.Core.Automapper
{
public static class AutoMapperWebConfiguration
{
public static void Configure()
{
ConfigureUserMapping();
}
private static void ConfigureUserMapping()
{
Mapper.CreateMap<Home, HomeDto>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
模型和Dto设置
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Sandbox.Models
{
public class Home
{
public int Price { get; set; }
public int Price2 { get; set; }
public MyStuff Stuff{ get; set; }
}
public class HomeDto
{
public int Price { get; set; }
public int Price2 { get; set; }
public MyStuff Stuff{ get; set; }
}
public class MyStuff
{
public int Abba { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
测试代码
var home = new Home();
home.Stuff= new MyStuff(){Abba = 1};
var homeDto = Mapper.Map<HomeDto>(home);
homeDto.MyStuff.Abba = 33;
Run Code Online (Sandbox Code Playgroud)
将homeDto的Abba值修改为33之后,home的Abba值也变为33.我是否错误配置了什么?我该怎么做才能解决这个问题?
您在源和目标对象上重用了一个类型,“MyStuff”。当 AutoMapper 看到两个可分配类型时,它会分配它们而不是复制它们。您可以通过创建显式映射来覆盖此行为:
Mapper.CreateMap<MyStuff, MyStuff>();
Run Code Online (Sandbox Code Playgroud)
AutoMapper 默认为赋值,因为 AutoMapper 不是复制/克隆库。