[英]C# Entity Framework set referenced entity to new parent entity
我有一个命令引用的消息列表。 此命令可能成功或失败。 每个命令都应该是一个新实体,但消息应该是唯一的,它应该始终引用最后一个命令或成功的命令。 所以我试图删除旧消息,我删除了命令和消息之间的引用,但总是得到这个错误:
无法跟踪实体类型“DbMessage”的实例,因为已经在跟踪具有相同键值 {'Id'} 的另一个实例。 附加现有实体时,请确保仅附加一个具有给定键值的实体实例。 考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看冲突的键值。
为了确保它是相同的消息,我使用这种方法:
public IDbMessage FirstOrdDefaultMessage(Func<IDbMessage, bool> predicate)
{
var attached = _context.Messages.Local.FirstOrDefault(predicate);
if (attached == null)
attached = _context.Messages.FirstOrDefault(predicate);
return attached;
}
但我仍然得到错误。 它甚至在本地返回消息,但只返回一次,但应该有两个。
Entity Framework 默认跟踪实体,如果你的操作是只读的,你应该总是使用.AsNoTracking()。 导致此错误的原因是您正在跟踪 DbMessage 的实例。 如果您尝试从数据库中获取(并跟踪)相同的实例,您将收到此错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.