无法跟踪实体类型 <T> 的实例,因为已跟踪另一个具有相同 {'Id'} 键值的实例

佩里耶

我正在研究一个函数,该函数应该将记录从三个表移动到它们的 Archive* 版本。这些表格是问题、操作、附件。首先,我从三个表中获取所有记录,然后制作它们的存档版本并将它们附加到上下文中:

var issue = _ctx.Issues.FirstOrDefault(x=>x.Id == issueId);
var actions = _ctx.Actions.Where(x=>x.IssueId == issueId).ToList();
var attachments = _ctx.Attachments.Where(x=>x.IssueId == issueId).ToList();

_ctx.Attachments.RemoveRange(attachments);
_ctx.Actions.RemoveRange(actions);
_ctx.Issues.Remove(issue);
await _ctx.SaveChangesAsync();

var archiveIssue = new ArchiveIssue(issue);
_ctx.ArchiveIssues.Add(archiveIssue); // this line throws the exception
_ctx.ArchiveActions.AddRange(actions.Select(x=>new ArchiveAction(x)));
_ctx.ArchiveAttachments.AddRange(attachments.Select(x=>new ArchiveAttachment(x)));
await _ctx.SaveChangesAsync();

trx.Commit();

我在 Add() 方法之前检查了 archiveIssue 实体,并且它的 Id 字段具有正确的值。表中没有其他记录具有该值。我已经尝试过其他几个版本,包括 AsNoTracking()、克隆问题实体或将其状态设置为已删除。

Archive* 表确实有一个键,它们被设置为 ValueGeneratedNever(),例如:

modelBuilder.Entity<ArchiveIssue>()
        .HasKey(c => c.Id);

modelBuilder.Entity<ArchiveIssue>()
        .Property(c => c.Id)
        .ValueGeneratedNever();

ArchiveIssue 构造函数只是将所有值从源实体复制到存档一:

public ArchiveIssue(Issue issue) {
        this.Id = issue.Id;
        this.Code = issue.Code;     
        this.WeekNo = issue.WeekNo;
        this.WeekCount = issue.WeekCount;
        this.CreateDate = issue.CreateDate;
        ...
}
佩里耶

错误消息只是许多错误的首要原因,主要原因是:

  • 我在原始问题的 ArchiveAttachment 中有一个外键(不是存档问题)。这导致 ArchiveAttachment 的实体创建后立即删除,因为 FK 属性中设置了级联删除。
  • 在 ArchiveActions 中有类似的错误:我在 ArchiveAction 的构造函数中有一个 this.Issue = action.Issue 行,而那个 action.Issue 只是原始问题,而不是在下一步中删除的存档问题。
  • op错误是由我认为的交叉外键引发的,但我不明白为什么。无论如何,在修复 FK 之后它就消失了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

ASP.NET MVC-附加类型为“ MODELNAME”的实体失败,因为相同类型的另一个实体已经具有相同的主键值

来自分类Dev

“附加类型T的实体失败,因为相同类型的另一个实体已经具有相同的主键值”

来自分类Dev

带有AutoMapper的通用工作单元和存储库模式引发异常“相同类型的另一个实体已经具有相同的主键值”

来自分类Dev

Gcloud实例无法ping通另一个

来自分类Dev

EF7迁移-实体类型“”对应的CLR类型不可实例化

来自分类Dev

(导轨)如何通过ID查找并将用户从另一个具有用户ID的模型保存到实例中?

来自分类Dev

类型变量(多个)的T没有实例存在,使得ID符合可比<?超级T>

来自分类Dev

引用相同对象类型的另一个对象实例的类对象属性

来自分类Dev

由于主键属性“ id”为空,因此无法跟踪类型的实体

来自分类Dev

无法跟踪,因为另一个实例具有相同的键值

来自分类Dev

EF Core:无法跟踪实体类型的实例,因为另一个具有相同键值的实例

来自分类Dev

无法跟踪实体类型“个人资料”的实例,因为已经跟踪了另一个键值为“ {Id:1087}”的实例

来自分类Dev

为什么会出现此异常“附加类型为'Model'的实体失败,因为相同类型的另一个实体已经具有相同的主键值。”

来自分类Dev

具有Automapper的EF Core引发异常“无法跟踪实体类型”

来自分类Dev

无法跟踪实体类型“ x”的实例,因为已经跟踪了具有相同的{'a','b'}键值的另一个实例

来自分类Dev

我如何在不创建另一个bean id的情况下访问类的相同实例

来自分类Dev

如何跟踪一个类中另一个类的实例?

来自分类Dev

EF,Automapper异常,“附加类型...的实体失败,因为相同类型的另一个实体已经具有相同的主键值”

来自分类Dev

(导轨)如何通过ID查找并将用户从另一个具有用户ID的模型保存到实例中?

来自分类Dev

无法实例化类型T

来自分类Dev

无法跟踪实体类型“ TestType”的实例,因为已经跟踪了具有相同键的该类型的另一个实例

来自分类Dev

EF Core 更新无法跟踪实体类型“广告”的实例

来自分类Dev

SQL 选择具有另一个实体的大多数实例的实体

来自分类Dev

无法加载,因为已经加载了另一个具有相同文件的 AssetBundle

来自分类Dev

附加类型为“XXX”的实体失败,因为同一类型的另一个实体已具有相同的主键值

来自分类Dev

附加“ModelName”类型的实体失败,因为另一个相同类型的实体已经具有相同的主键值

来自分类Dev

ASP.NET Core - 无法跟踪实体类型的实例

来自分类Dev

播种数据库时无法跟踪实体类型“分配”的实例

来自分类Dev

“如何修复“实体类型的实例”无法跟踪,因为另一个具有键值“{TypeId: 1}”的实例已被跟踪。

Related 相关文章

  1. 1

    ASP.NET MVC-附加类型为“ MODELNAME”的实体失败,因为相同类型的另一个实体已经具有相同的主键值

  2. 2

    “附加类型T的实体失败,因为相同类型的另一个实体已经具有相同的主键值”

  3. 3

    带有AutoMapper的通用工作单元和存储库模式引发异常“相同类型的另一个实体已经具有相同的主键值”

  4. 4

    Gcloud实例无法ping通另一个

  5. 5

    EF7迁移-实体类型“”对应的CLR类型不可实例化

  6. 6

    (导轨)如何通过ID查找并将用户从另一个具有用户ID的模型保存到实例中?

  7. 7

    类型变量(多个)的T没有实例存在,使得ID符合可比<?超级T>

  8. 8

    引用相同对象类型的另一个对象实例的类对象属性

  9. 9

    由于主键属性“ id”为空,因此无法跟踪类型的实体

  10. 10

    无法跟踪,因为另一个实例具有相同的键值

  11. 11

    EF Core:无法跟踪实体类型的实例,因为另一个具有相同键值的实例

  12. 12

    无法跟踪实体类型“个人资料”的实例,因为已经跟踪了另一个键值为“ {Id:1087}”的实例

  13. 13

    为什么会出现此异常“附加类型为'Model'的实体失败,因为相同类型的另一个实体已经具有相同的主键值。”

  14. 14

    具有Automapper的EF Core引发异常“无法跟踪实体类型”

  15. 15

    无法跟踪实体类型“ x”的实例,因为已经跟踪了具有相同的{'a','b'}键值的另一个实例

  16. 16

    我如何在不创建另一个bean id的情况下访问类的相同实例

  17. 17

    如何跟踪一个类中另一个类的实例?

  18. 18

    EF,Automapper异常,“附加类型...的实体失败,因为相同类型的另一个实体已经具有相同的主键值”

  19. 19

    (导轨)如何通过ID查找并将用户从另一个具有用户ID的模型保存到实例中?

  20. 20

    无法实例化类型T

  21. 21

    无法跟踪实体类型“ TestType”的实例,因为已经跟踪了具有相同键的该类型的另一个实例

  22. 22

    EF Core 更新无法跟踪实体类型“广告”的实例

  23. 23

    SQL 选择具有另一个实体的大多数实例的实体

  24. 24

    无法加载,因为已经加载了另一个具有相同文件的 AssetBundle

  25. 25

    附加类型为“XXX”的实体失败,因为同一类型的另一个实体已具有相同的主键值

  26. 26

    附加“ModelName”类型的实体失败,因为另一个相同类型的实体已经具有相同的主键值

  27. 27

    ASP.NET Core - 无法跟踪实体类型的实例

  28. 28

    播种数据库时无法跟踪实体类型“分配”的实例

  29. 29

    “如何修复“实体类型的实例”无法跟踪,因为另一个具有键值“{TypeId: 1}”的实例已被跟踪。

热门标签

归档