【问题标题】:New object in Entity Framework - problems with primary key实体框架中的新对象 - 主键问题
【发布时间】:2009-07-23 16:38:43
【问题描述】:

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

new Vehicle();

并适当地更新车辆的属性。

当我尝试做一个

genesisContext.Vehicles.AddObject(vehicle);

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

违反主键约束“VEHICLES_PK”。无法插入 对象 'dbo.Vehicles' 中的重复键。\r\n语句已被 终止。

(大概是因为EF设置的主键还是0)

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

【问题讨论】:

    标签: sql-server entity-framework


    【解决方案1】:

    你有两个选择:

    • 或者让数据库处理主键,通过将 VehicleID 指定为 INT IDENTITY(1,1) - 在这种情况下,SQL Server 将自动分配唯一的和单独的数字,而 EF 可以这样做
    • 或者您自己处理,例如您必须在您的应用中找到一种方法来提供唯一的车辆 ID 号。

    开箱即用的 EF 没有任何东西可以神奇地为主键分配唯一数字 - 如果您这么认为,那是一个误解。

    马克

    【讨论】:

    • 如果您自己处理,您需要围绕多个用户同时插入的可能问题进行设计。我更喜欢自动生成的值。
    • 是的,绝对 - 这就是为什么最好留给数据库来确保 ID 是唯一的!
    • 谢谢 - 是的,问题是我没有在数据库中设置身份列
    【解决方案2】:

    您可以在ObjectContextSavingChanges 事件上分配新ID

    objectContext.SavingChanges += new EventHandler(objectContext_SavingChanges);
    

    【讨论】:

      猜你喜欢
      • 2012-10-25
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多