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

时间:2009-07-23 16:38:44

标签: sql-server entity-framework

在我的数据库中,我有一个带有主键的Vehicle表。我正在使用

创建一个新的Vehicle对象
new Vehicle();

并适当更新车辆的属性。

当我尝试做

genesisContext.Vehicles.AddObject(vehicle);

第一次成功更新表并且主键为0.在以后的所有情况下,我都会收到错误消息,指出密钥不是唯一的

  

违反PRIMARY KEY约束'VEHICLES_PK'。无法插入   对象'dbo.Vehicles'中的重复键。\ r \ n声明已经存在   终止。

大概是因为EF设置的主键仍为0

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

2 个答案:

答案 0 :(得分:9)

您有两种选择:

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

马克

答案 1 :(得分:1)

您可以在SavingChanges

ObjectContext事件中指定新ID
objectContext.SavingChanges += new EventHandler(objectContext_SavingChanges);