我正在使用Entity framework 4.1
我有常规对象,我将其ID设置为123456789(长值)
然后我调用SaveChanges()
问题是SaveChanges()正在内存和数据库内部更改我的ID 它将ID指定为20
如果我将重复此操作,它会将id指定为21,依此类推..
什么可能导致这种行为?我该怎么做才能解决它?
身份证明声明: 公共长身份证{get;组; }
之前已经工作了,它可能在ID被声明为int之前起作用(将其更改回检查是太大的修改..)
由于
答案 0 :(得分:4)
问题是SaveChanges()正在改变我的内存和ID 在数据库内部,它将ID分配为20
数据库中的ID列很可能是Identity column,因此Id由数据库分配,而不是由您分配。如果您确实想自己分配Id值,请删除列的Identity属性。
假设您没有首先使用代码而您正在使用Sql Server打开SQL Server Management Studio中的表并转到ID列的列属性 - 选择“(Is Identity) - No”。
修改强>
首先,对于代码,您可以使用属性
强制使用非身份密钥 [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
ID属性上的。是否有特定用例为什么你想要这样做?通常,它更容易让数据库处理密钥的唯一性。
答案 1 :(得分:2)
您班级中的密钥的以下注释应该为您修复
[DatabaseGenerated(DatabaseGenerationOption.None)]