Обновление принадлежащих лиц в EF Core 2.2 - PullRequest
0 голосов
/ 08 июля 2019

У меня есть сущность с вложенными объектами-значениями, то есть сущность, которая содержит принадлежащий тип, который содержит принадлежащий тип.

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 (и) строку (и).Данные могут быть изменены или удалены, так как объекты были загружены.

Есть ли способ сделать это?

...