实体框架错误:属性';Id';是对象的一部分';s密钥信息,无法修改

本文关键字:信息 密钥 修改 一部分 错误 框架 属性 Id 对象 实体 | 更新日期: 2024-10-22 05:12:07

这是我第一次在StackOverflow中提问,尽管我已经阅读和使用论坛至少一年了,所以请耐心等待。

我正在做一个副业,几个星期以来我一直在努力解决这个问题。我无法缩小问题的范围,我已经尝试了网上发布的大量不同的解决方案,但似乎没有一个能解决我的问题

错误

属性"Id"是对象密钥信息的一部分,无法修改。

症状

  • 我可以判断问题发生在调用EntityFramework函数时,尤其是SaveChanges,但Find也会发生这种情况
  • 我相信这个问题是在我重命名数据库中的一个表时开始发生的(它的代码优先,但我不能删除数据库,因为我不能丢失数据。)。迁移创建了一个巨大的脚本,该脚本部分运行,我对其中的部分进行了注释,直到它工作为止。我开始认为这是我所有问题的根源,但我仍然找不到原因。凭借我所掌握的一点知识,我已经确保表设置了主键,并且设置了主键(InvalidOperationException:该属性是对象键信息的一部分,不能修改)

问题

  • 首先,当我只是试图从数据库中获取记录时,为什么会出现这个错误
  • 我还应该看什么

代码示例

保存更改

public CandidatoDetail Get(Guid id)
{
    return _dbContext.CandidatoDetails.Include("Nacionalidad").SingleOrDefault(c => c.Id == id);
}

查找

public Procedencia Get(Guid id)
{
    return _dbContext.Procedencias.Find(id);
}

Procedencia实体

namespace GAdUPIN.CORE.Domain
{
    public class Procedencia
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public Guid Id { get; set; }
        [DisplayName("Canal de procedencia")]
        [Required(ErrorMessage = "Debe incluir el nombre de la procedencia")]
        public string NombreProcedencia { get; set; }    
    }
}

我尝试过谷歌上出现的堆栈溢出和许多其他论坛上的大多数答案,这些答案似乎为我指明了正确的方向,但都无济于事。任何帮助都将不胜感激。

实体框架错误:属性';Id';是对象的一部分';s密钥信息,无法修改

只是粘贴我给@jeff siver的评论,作为我如何找到解决问题的方法。它实际上并没有找到问题的根源,但它让问题消失了。

对于其他有同样问题的人来说,这可能不是最好的解决方案,但我将解决方案从Visual Studio 2010(使用Entity Framework 4.0)升级到了Visual Studio 2015,这反过来也迫使我升级了Entity Framework to 6.0

我知道这不是最理想的解决方案,但对于其他尝试过一切的人来说,这可能是另一件需要尝试的事情。