【发布时间】:2022-11-09 19:14:29
【问题描述】:
当我使用 AutoMapper 将输入模型与数据库实体映射时,实体状态会更改为“分离”,这意味着更改不会保存到数据库中。
CreateMap<User, UserInput>().ReverseMap();
添加/更新:
[BindProperty]
public IList<UserInput> UsersInput { get; set; }
public async Task<PageResult> OnGetAsync()
{
var users = await _dbContext.Users.ToListAsync();
UsersInput = _mapper.Map<List<UsersInput>>(signers);
return Page();
}
public async Task<IActionResult> OnPostAsync()
{
var users = await _dbContext.Users.ToListAsync();
foreach (var u in users)
{
Console.WriteLine(_dbContext.Entry(u).State); // => Unchanged
}
users = _mapper.Map(UsersInput, users);
foreach (var u in users)
{
Console.WriteLine(_dbContext.Entry(u).State); // => Detached
}
// Save and return
await _dbContext.SaveChangesAsync(); // => Nothing is saved because entities are Detached
return Page();
}
这与我映射数据的方式有关吗?
【问题讨论】:
-
从理论上讲,它应该在没有分配的情况下工作。你试过
_mapper.Map(UsersInput, users);吗? -
你是对的,但这不会改变任何事情。
-
我从未尝试过将 (src,dest) 映射器调用与集合一起使用...我非常怀疑这是否能可靠地知道将哪个源元素与哪个目标元素进行映射。我建议遍历修改后的列表,从用户那里获取实体并在循环中使用
_mapper.Map(modified, entity),看看这是否会改变行为。
标签: c# entity-framework-core automapper