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

伊布萨姆

当我的代码在以下位置抛出异常时,我陷入了困境:

dbContext.Entry(entity).State = EntityState.Modified;

自上个月以来我一直在使用此代码,但仅在两天前才出现此异常。我已经阅读了很多主题,但没有一个对我有益。问题是当尝试更新现有记录时,它总是显示以下错误:

附加类型为“X”的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”。

我使用了以下代码:

{
    if (unitOfWork.AddressRepository.DataSet.Where(x => x.AddressId == item.AddressId).ToList().Count() > 0)
       unitOfWork.AddressRepository.Update(item);
    else
       unitOfWork.AddressRepository.Create(item);
}  
public virtual void Update(T entity)
{
    dbContext.Entry(entity).State = EntityState.Modified;
} 

出于测试目的,我还使用“更新”方法进行了实验

try
{
    dbContext.Entry(entity).State = EntityState.Modified;
}
catch (Exception ex)
{
    Create(entity);
}

public virtual void Create(T entity)
{
    dbSet.Add(entity);
}

//constructor taking the database context and getting the appropriately typed data set from it
public Repository(DBEntities context)
{
    dbContext = context;
    dbSet = context.Set<T>();
}

我已经在构造函数中填充了我的 dbContext。所以我总是在开始时得到 dbContext。

每次执行 Create(entity) 方法都会创建一个新记录。当我检查数据库时,记录被重复。

伊布萨姆

两天后,我终于得到了我想分享以帮助他人的解决方案。

实际上,我使用 web apis 从客户端接收数据,填充模型然后调用 entity.modified。但是实体框架只更新其当前的 dbContext。因此,首先,我从 dbContext 获取特定数据,然后通过“ AutoMapper更新该特定对象下面给出的代码解释了一切。

{
   //--get particular data from dbContext 
   var _address = unitOfWork.AddressRepository.GetById(address.AddressId);
   Mapper.CreateMap<Data.Concrete.Address, Data.Concrete.Address>();
   //--update that particular object via autoMapper
   var _customAddress = Mapper.Map<Address, Address>(address, _address);
       if (unitOfWork.AddressRepository.DataSet.Where(x => x.AddressId == address.AddressId).ToList().Count() > 0)
          unitOfWork.AddressRepository.Update(_customAddress);
       else
          unitOfWork.AddressRepository.Create(address);
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类常见问题

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

来自分类Dev

实体框架将主键定义为另一个实体的外键

来自分类Dev

一个实体与另一个实体具有2个ManyToOne关系

来自分类Dev

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

来自分类Dev

在Spring Data Mongo中保存与另一个实体具有循环引用的实体将失败

来自分类Dev

实体框架表拆分:不在同一类型层次结构中/没有有效的一对一外键关系

来自分类Dev

实体框架表拆分:不在同一类型层次结构中/没有有效的一对一外键关系

来自分类Dev

怎么低估了!为同一类型工作?

来自分类Dev

如何判断两个模板类是否为同一类型

来自分类Dev

使用Jquery .each()函数隐藏图像,因为同一类中显示了另一个图像

来自分类Dev

为什么我可以定义一个静态常量,该静态常量依赖于同一类型的另一个静态常量,而不是属性?

来自分类Dev

将一个案例类转换为具有相同结构但具有一个附加字段的另一个案例类

来自分类Dev

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

来自分类Dev

在Spring Data JPA中保存实体,该实体包含另一个实体类型的列表

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

    实体框架将主键定义为另一个实体的外键

  18. 18

    一个实体与另一个实体具有2个ManyToOne关系

  19. 19

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

  20. 20

    在Spring Data Mongo中保存与另一个实体具有循环引用的实体将失败

  21. 21

    实体框架表拆分:不在同一类型层次结构中/没有有效的一对一外键关系

  22. 22

    实体框架表拆分:不在同一类型层次结构中/没有有效的一对一外键关系

  23. 23

    怎么低估了!为同一类型工作?

  24. 24

    如何判断两个模板类是否为同一类型

  25. 25

    使用Jquery .each()函数隐藏图像,因为同一类中显示了另一个图像

  26. 26

    为什么我可以定义一个静态常量,该静态常量依赖于同一类型的另一个静态常量,而不是属性?

  27. 27

    将一个案例类转换为具有相同结构但具有一个附加字段的另一个案例类

  28. 28

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

  29. 29

    在Spring Data JPA中保存实体,该实体包含另一个实体类型的列表

热门标签

归档