我有一个带有嵌套值对象的实体-即一个实体,该实体包含一个拥有的类型,该实体包含一个拥有的类型。
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行。自加载实体以来,数据可能已被修改或删除。
有没有办法做到这一点?