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

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时可能工作过(将其更改回来检查是否修改过大..)

谢谢

Bro*_*ass 5

问题是 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 属性上。您为什么要这样做有特定的用例吗?通常让数据库处理键的唯一性更容易。