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

拉法·阿亚迪

我正在使用 Entity 更新数据库中的一行。我的表单返回一个对象,该对象应该更新存储在数据库中的旧对象。当我发现用户将密码字段留空时,我想保留旧对象的相同旧密码值。每当我调用数据库询问旧对象时,我都会在使用 Entity 更新对象时遇到错误。我已经尝试了所有的 AddOrUpdate、Attach、Detach 东西,但没有任何效果。另外,我不能先删除再添加,因为 OldConnector 在表上有一个我无法修改的增量 ID。这是我的代码:

public void Update(Connector NewConnector)
    {
        {
            if (NewConnector.Password == "")
            {
                Connector OldConnector = _db.ConnectorsTable.Where(x => x.ID == NewConnector.ID).FirstOrDefault(); //Grabbing the old connectors password
                NewConnector.Password = OldConnector.Password;
            }
        }
        _db.Entry(NewConnector).State = EntityState.Modified; //Code Crashes here
        _db.SaveChanges();
    }
大卫·G

实体框架跟踪您已加载的对象。因此,当您查询数据库中的OldConnector对象时,该项目将保存在内存中。

然后继续尝试保存NewConnector具有相同主键 ID 的对象。实体框架检查其内部状态并找到匹配的实体,这就是您收到错误的原因。由于您正在尝试更新现有对象,因此您应该这样做:

public void Update(Connector newConnector)
{
    if (newConnector == null)
    {
        throw new ArgumentNullException(nameof(newConnector));
    }

    var oldConnector = _db.ConnectorsTable
        .Where(x => x.ID == newConnector.ID)
        .Single(); //Grabbing the old connectors password

    if (newConnector.Password == "")
    {
        newConnector.Password = oldConnector.Password;
    }

    //Update the old entity with values from the new entity:
    _db.Entry(oldConnector).CurrentValues.SetValues(newConnector);
    _db.SaveChanges();
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

Hibernate在另一个实体列表中不包括与实体类型相同的子实体

来自分类常见问题

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

来自分类Dev

从相同类型的另一个对象更新Entity Framework对象

来自分类Dev

如何编写一种方法,该方法接受类型为x的数组以及与该数组具有相同类型的另一个变量

来自分类Dev

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

来自分类Dev

ASP.NET MVC链接到相同类型的另一个对象

来自分类Dev

附加“ X”类型的实体失败,因为另一个相同类型的实体

来自分类Dev

在EF 6中更新现有数据会引发异常-“ ...相同类型的实体已经具有相同的主键值。”

来自分类Dev

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

来自分类Dev

将一个结构复制到另一个具有相同成员和不同类型的结构

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

TypeScript:如何使用变量推断的类型在类外部定义具有相同类型的另一个变量

来自分类Dev

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

来自分类Dev

从相同类型的另一个对象更新Entity Framework对象

来自分类Dev

如何将键值对引用从一个映射复制到另一个相同类型的映射?

来自分类Dev

ASP.NET MVC链接到相同类型的另一个对象

来自分类Dev

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

来自分类Dev

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

来自分类Dev

一个实体引用 2 个相同实体类型的实体关系?

来自分类Dev

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

来自分类Dev

声明与另一个信号相同类型的信号 (VHDL)

来自分类Dev

查询以过滤具有相同非主键值的行,然后从 Oracle 中的结果中排除具有另一个空列的记录

来自分类Dev

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

来自分类Dev

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

来自分类Dev

使用 by 委托给相同类型的另一个对象甚至不编译

来自分类Dev

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

Related 相关文章

  1. 1

    Hibernate在另一个实体列表中不包括与实体类型相同的子实体

  2. 2

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

  3. 3

    从相同类型的另一个对象更新Entity Framework对象

  4. 4

    如何编写一种方法,该方法接受类型为x的数组以及与该数组具有相同类型的另一个变量

  5. 5

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

  6. 6

    ASP.NET MVC链接到相同类型的另一个对象

  7. 7

    附加“ X”类型的实体失败,因为另一个相同类型的实体

  8. 8

    在EF 6中更新现有数据会引发异常-“ ...相同类型的实体已经具有相同的主键值。”

  9. 9

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

  10. 10

    将一个结构复制到另一个具有相同成员和不同类型的结构

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

    TypeScript:如何使用变量推断的类型在类外部定义具有相同类型的另一个变量

  16. 16

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

  17. 17

    从相同类型的另一个对象更新Entity Framework对象

  18. 18

    如何将键值对引用从一个映射复制到另一个相同类型的映射?

  19. 19

    ASP.NET MVC链接到相同类型的另一个对象

  20. 20

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

  21. 21

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

  22. 22

    一个实体引用 2 个相同实体类型的实体关系?

  23. 23

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

  24. 24

    声明与另一个信号相同类型的信号 (VHDL)

  25. 25

    查询以过滤具有相同非主键值的行,然后从 Oracle 中的结果中排除具有另一个空列的记录

  26. 26

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

  27. 27

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

  28. 28

    使用 by 委托给相同类型的另一个对象甚至不编译

  29. 29

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

热门标签

归档