实体框架错误:属性';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; }
}
}
我尝试过谷歌上出现的堆栈溢出和许多其他论坛上的大多数答案,这些答案似乎为我指明了正确的方向,但都无济于事。任何帮助都将不胜感激。
只是粘贴我给@jeff siver的评论,作为我如何找到解决问题的方法。它实际上并没有找到问题的根源,但它让问题消失了。
对于其他有同样问题的人来说,这可能不是最好的解决方案,但我将解决方案从Visual Studio 2010(使用Entity Framework 4.0
)升级到了Visual Studio 2015,这反过来也迫使我升级了Entity Framework to 6.0
。
我知道这不是最理想的解决方案,但对于其他尝试过一切的人来说,这可能是另一件需要尝试的事情。