Sql server 实体框架中的新对象-主键问题

Sql server 实体框架中的新对象-主键问题,sql-server,entity-framework,Sql Server,Entity Framework,在我的数据库中,我有一个带有主键的Vehicle表。我正在使用创建一个新的车辆对象 new Vehicle(); 适当更新车辆的性能 当我试着做一个 genesisContext.Vehicles.AddObject(vehicle); 第一次成功更新表且主键为0时。在随后的所有情况下,我都会收到一个错误,说明密钥不是唯一的 违反主键约束“VEHICLES_PK”。无法插入 对象“dbo.Vehicles”中存在重复密钥。\r\n语句已被删除 终止 (可能是因为EF设置的主键仍然为0) 我的

在我的数据库中,我有一个带有主键的
Vehicle
表。我正在使用创建一个新的
车辆
对象

new Vehicle();
适当更新车辆的性能

当我试着做一个

genesisContext.Vehicles.AddObject(vehicle);
第一次成功更新表且主键为0时。在随后的所有情况下,我都会收到一个错误,说明密钥不是唯一的

违反主键约束“VEHICLES_PK”。无法插入 对象“dbo.Vehicles”中存在重复密钥。\r\n语句已被删除 终止

(可能是因为EF设置的主键仍然为0)

我的理解是EF智能地计算主键,所以为什么会发生这种情况???

您有两个选择:

  • 您可以通过将车辆ID指定为
    INT IDENTITY(1,1)
    ,让数据库处理主键,在这种情况下,SQL Server将自动分配唯一和单独的编号,EF也可以
  • 或者您自己处理,例如,您必须在应用程序中找到一种方法来提供唯一的车辆ID号
EF开箱即用没有任何东西可以神奇地为主键分配唯一的数字-如果你认为这是一个误解


Marc

您可以在
ObjectContext

objectContext.SavingChanges += new EventHandler(objectContext_SavingChanges);

如果你处理好了自己的问题,你需要围绕多个用户同时安装可能出现的问题进行设计。我更喜欢有一个自动生成的值。是的,绝对-这就是为什么最好让数据库来确保ID是唯一的!谢谢-是的,问题是我没有在数据库中设置标识列