在EF Core 2.2中更新拥有实体

时间:2019-07-08 16:42:59

标签: c# entity-framework-core-2.2

我有一个带有嵌套值对象的实体-即一个实体,该实体包含一个拥有的类型,该实体包含一个拥有的类型。

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...
}

由于bug in 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行。自加载实体以来,数据可能已被修改或删除。

有没有办法做到这一点?

0 个答案:

没有答案