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

Cal*_*nus 4 sql-server entity-framework

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

new Vehicle();
Run Code Online (Sandbox Code Playgroud)

并适当更新车辆的属性.

当我尝试做一个

genesisContext.Vehicles.AddObject(vehicle);
Run Code Online (Sandbox Code Playgroud)

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

违反PRIMARY KEY约束'VEHICLES_PK'.无法在对象'dbo.Vehicles'中插入重复键.\ r \n语句已终止.

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

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

mar*_*c_s 9

你有两个选择:

  • 要么让数据库处理主键,要么将VehicleID指定为INT IDENTITY(1,1)- 在这种情况下,SQL Server将自动分配唯一和单独的数字,而EF将很好用
  • 或者你自己处理,例如,你必须在你的应用程序中找到一种方法来提出独特的车辆ID号码.

开箱即用的EF没有任何内容可以神奇地为主键分配唯一的数字 - 如果你认为这是一个误解.

  • 如果您自己处理,您需要针对多个用户同时进行设计来解决可能出现的问题.我更喜欢拥有自动生成的值. (3认同)