У меня есть сущность с вложенными объектами-значениями, то есть сущность, которая содержит принадлежащий тип, который содержит принадлежащий тип.
public class User { // entity
public long Id { get; set; }
public Token Token { get; private set; }
// other stuff...
}
public class Token { // value object (owned type)
public Hash Hash { get; private set; }
// other stuff...
}
public class Hash { // value object (owned-owned type)
// other stuff...
}
Обновление принадлежащих типов не работает из-за ошибка в EF Core 2.2 .Обходы в этой проблеме github не работают для меня.
Я думаю, причина в том, что я получаю user
сущность через UserManager<T>
вместо DbContext
.Но он все равно использует контекст (который ограничен контейнером IoC для каждого запроса, так что это тот же самый контекст, использую ли я UserManager
или Context
).
Я пробовал это:
// ...get user from UserManager (I can't change that)
_context.Entry(user).State = EntityState.Detached;
if (user.Token != null) _context.Entry(user.Token).State = EntityState.Detached;
if (user.Token?.Hash != null) _context.Entry(user.Token.Hash).State = EntityState.Detached;
user.createNewToken();
_context.Update(user);
_context.Update(user.Token);
_context.Update(user.Token.Hash);
await _context.SaveChangesAsync();
Но я получаю:
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: ожидается, что операция с базой данных повлияет на 1 строку (и), но фактически затронет 0 (и) строку (и).Данные могут быть изменены или удалены, так как объекты были загружены.
Есть ли способ сделать это?