Del*_*ate 1 c# entity-framework-4.1
我正在使用实体框架4.1
我有常规对象,我将他的 ID 设置为 123456789 (长值)
然后我调用 SaveChanges()
问题是 SaveChanges() 正在更改内存和数据库中的 ID,它将 ID 指定为 20
如果我重复这个,它会将 id 指定为 21 等等。
什么会导致这种行为?我应该做什么来解决它?
ID声明:public long ID { get; 放; }
以前已经工作过,以前当ID声明为int时可能工作过(将其更改回来检查是否修改过大..)
谢谢
问题是 SaveChanges() 正在更改内存和数据库中的 ID,它将 ID 指定为 20
数据库中的 ID 列很可能是Identity 列,因此 Id 是由数据库分配的,而不是由您分配的。如果您确实想自己分配 Id 值,请删除该列的 Identity 属性。
假设您不首先使用代码并且正在使用 Sql Server,请在 SQL Server Management Studio 中打开表并转到 ID 列的列属性 - 选择“(Is Identity) - No”。

编辑:
对于代码优先,您可以使用属性强制使用非身份密钥
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
Run Code Online (Sandbox Code Playgroud)
在 ID 属性上。您为什么要这样做有特定的用例吗?通常让数据库处理键的唯一性更容易。