繁体   English   中英

C# 实体框架将引用实体设置为新的父实体

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM