实体框架错误:属性“Id”是对象的关键信息的一部分,无法修改

时间:2016-04-20 22:56:49

标签: c# entity-framework

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

我正在开展一个侧面项目,我一直试图解决这个问题好几周。我无法缩小问题的范围,我已尝试在网上发布了大量不同的解决方案,但似乎没有一个解决方案适合我。

错误

  

属性“Id”是对象关键信息的一部分,无法修改。

症状

  • 我可以告诉调用EntityFramework函数时会出现问题,尤其是SaveChanges,但它也是由Find
  • 发生的
  • 我相信当我在数据库中重命名一个表时,这个问题就开始发生了(它的Code First但我无法删除数据库,因为我无法丢失数据)。迁移创建了一个部分运行的巨大脚本,我评论它的部分直到它工作。我开始认为这是我所有问题的根源,但我仍然无法找到原因。凭借我所拥有的一点点知识,我确保这些表设置了主键,并且(InvalidOperationException: The property is part of the object's key information and cannot be modified)。

问题

  • 首先,当我只是想从数据库中获取记录时,为什么会出现此错误?
  • 我应该关注哪些其他事情?

代码示例

的SaveChanges

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 Entity

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; }    
    }
}

我已经尝试了大多数答案,这些答案出现在谷歌堆栈溢出和许多其他论坛似乎指向我正确的方向但无济于事。任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

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

对于遇到相同问题的其他人而言,它可能不是最佳解决方案,但我将我的解决方案从Visual Studio 2010(使用Entity Framework 4.0)升级到Visual Studio 2015,这反过来也迫使我升级{ {1}}。

我知道它不是最优化的解决方案,但对于尝试过所有内容的其他人来说,这可能是另一种尝试。