实体框架正在替换我的对象的ID

时间:2011-10-29 16:38:40

标签: c# entity-framework-4.1

我正在使用Entity framework 4.1

我有常规对象,我将其ID设置为123456789(长值)

然后我调用SaveChanges()

问题是SaveChanges()正在内存和数据库内部更改我的ID 它将ID指定为20

如果我将重复此操作,它会将id指定为21,依此类推..

什么可能导致这种行为?我该怎么做才能解决它?

身份证明声明: 公共长身份证{get;组; }

之前已经工作了,它可能在ID被声明为int之前起作用(将其更改回检查是太大的修改..)

由于

2 个答案:

答案 0 :(得分:4)

  

问题是SaveChanges()正在改变我的内存和ID   在数据库内部,它将ID分配为20

数据库中的ID列很可能是Identity column,因此Id由数据库分配,而不是由您分配。如果您确实想自己分配Id值,请删除列的Identity属性。

假设您没有首先使用代码而您正在使用Sql Server打开SQL Server Management Studio中的表并转到ID列的列属性 - 选择“(Is Identity) - No”。

enter image description here

修改

首先,对于代码,您可以使用属性

强制使用非身份密钥
  [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
ID属性上的

。是否有特定用例为什么你想要这样做?通常,它更容易让数据库处理密钥的唯一性。

答案 1 :(得分:2)

您班级中的密钥的以下注释应该为您修复

[DatabaseGenerated(DatabaseGenerationOption.None)]