Automapper不将配置应用于新实例

时间:2018-11-01 10:29:52

标签: c# asp.net-core .net-core automapper

我具有用于自动映射器的配置

public class Mapping : Profile
{
    public Mapping()
    {
        CreateMap<User, User>().ForMember(dest => dest.Id, opt => opt.Ignore());
    }
}

我使用的是.net core,因此我的启动程序具有

services.AddAutoMapper();

我的带有构造函数的控制器

public Controller(DbContext dbContext, IMapper mapper)
{
    _dbContext = dbContext;
    _mapper = mapper;
}

然后我有一些代码可以复制用户。在这里,我尝试将切除用户映射到除Id属性之外的新实例,然后保存到数据库。

User user = await _dbContext.Users.FindAsync(id);
User newUser = _mapper.Map<User>(user);
await _dbContext.Users.AddAsync(newUser);
await _dbContext.SaveChangesAsync();

问题是Id属性的配置不起作用。我有newUser和现有的Id用户。为什么不忽略该属性?

User.cs

public class User
{
    public User()
    {
    }

    public User(string name)
    {
        Name = name;
    }

    public int Id { get; private set; }
    public string Name { get; private set; }
}

更新

我发现这段代码可以正常工作

var newUser = new User();
_mapper.Map<User, User>(user, newUser);

为什么我不能使用User newUser = _mapper.Map<User>(user);

根据执行计划

$id = .Block(System.Int32 $resolvedValue) {
                    $resolvedValue = .If (
                        $src == null || False
                    ) {
                        .Default(System.Int32)
                    } .Else {
                        $src.Id
                    };
                    $resolvedValue
                };

0 个答案:

没有答案