我具有用于自动映射器的配置
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
};