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

卡里姆

假设我们有以下两个数据库表:

Foo:
> FooId (PK)
> FooName

Bar:
> BarId (PK, FK)
> Comment
> Other columns...

我有以下EF映射:

[Table("Foo")]
public class Foo
{
    [Key]
    public long FooId { get; set; }

    public string FooName { get; set; }

    // (0-n) relation
    // public List<Bar> Bars { get; set; }
}

[Table("Bar")]
public class Bar
{
    // PK/FK
    [Key, ForeignKey("Foo")]
    public long BarId { get; set; }

    public string Comment { get; set; }
}

实体“ Bar”仅具有一个外键作为主键。每当我尝试插入这样的新Bar实体时:

var demoList = new List<Bar>();
// Populate demoList with random data
_context.Bars.AddRange(demoList);
_context.SaveChanges();

我收到此异常:

'The instance of entity type 'Bar' cannot be tracked because another instance with the same key value for {'BarId'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attached. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see the conflicting key values.'

EF考虑到“ BarId”必须是唯一的,因为该属性被标记为“ Key”,但这是一对多关系中的PK / FK(“ Foo”可以有0个或多个“ Bar”),请在这里想念吗?

扎法尔

如果Foo可以有零个或许Bar多个,则是一对多关系。您通常会创建一个密钥既PrimaryKeyForiegnKey如果关系是一对零或多功能一体机。因此,根据您的要求,您的模型应类似于以下所示:

[Table("Foo")]
public class Foo
{
    [Key]
    public long FooId { get; set; }

    public string FooName { get; set; }

    public virtual List<Bar> Bars { get; set; }
}

[Table("Bar")]
public class Bar
{

    [Key]
    public long BarId { get; set; }

    public long FooId { get; set; }

    [ForeignKey("FooId")]
    public virtual Foo Foo { get; set; }

    public string Comment { get; set; }
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

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

来自分类Dev

实体类型没有定义键EF6

来自分类Dev

EF一对一的关系变更实体与另一个(替代)

来自分类Dev

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

来自分类Dev

MVC 5中带有EF 6的错误“ System.InvalidOperationException:IEntityChangeTracker的多个实例无法引用一个实体对象。”

来自分类Dev

具有TPH继承的实体类型到多个表的EF映射属性

来自分类Dev

EF代码优先:具有多个多对一关系的实体类型

来自分类Dev

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

来自分类Dev

Ef Core 3实体类型XOrder不能映射到表,因为它是从Order派生的。只能将基本实体类型映射到表

来自分类Dev

包括另一个表时,EF Core不会返回所有值

来自分类Dev

具有同一属性的EF与多对多关系在另一个表上

来自分类Dev

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

来自分类Dev

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

来自分类Dev

EF Core 3:无法将CLR属性“ Number”添加到实体类型“ CHSIMTBase”,因为它是在CLR类型“合同”上声明的

来自分类Dev

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

来自分类Dev

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

来自分类Dev

EF Core 5.0如何使用一个通用存储库管理多个实体类

来自分类Dev

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

来自分类Dev

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

来自分类Dev

具有TPH继承的实体类型到多个表的EF映射属性

来自分类Dev

EF代码优先:具有多个多对一关系的实体类型

来自分类Dev

EF6如何避免为由另一个DbContext管理的实体创建表?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

    实体类型没有定义键EF6

  3. 3

    EF一对一的关系变更实体与另一个(替代)

  4. 4

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

  5. 5

    MVC 5中带有EF 6的错误“ System.InvalidOperationException:IEntityChangeTracker的多个实例无法引用一个实体对象。”

  6. 6

    具有TPH继承的实体类型到多个表的EF映射属性

  7. 7

    EF代码优先:具有多个多对一关系的实体类型

  8. 8

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

  9. 9

    Ef Core 3实体类型XOrder不能映射到表,因为它是从Order派生的。只能将基本实体类型映射到表

  10. 10

    包括另一个表时,EF Core不会返回所有值

  11. 11

    具有同一属性的EF与多对多关系在另一个表上

  12. 12

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

  13. 13

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

  14. 14

    EF Core 3:无法将CLR属性“ Number”添加到实体类型“ CHSIMTBase”,因为它是在CLR类型“合同”上声明的

  15. 15

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

  16. 16

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

  17. 17

    EF Core 5.0如何使用一个通用存储库管理多个实体类

  18. 18

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

  19. 19

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

  20. 20

    具有TPH继承的实体类型到多个表的EF映射属性

  21. 21

    EF代码优先:具有多个多对一关系的实体类型

  22. 22

    EF6如何避免为由另一个DbContext管理的实体创建表?

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档