请耐心等待我的解释很长。
我在 EF4 中使用映射存储过程设置了一个表来插入数据。
例子 :
id | location | type
1 | 10 | 15
5 | 10 | 16
SP 所做的是在另一个表中检查按位置和类型对应的下一个 id。
所以在这个例子中,下一个 id 将是
- 2 用于位置 10 和类型 15
- 6 用于位置 10 类型 16
这通过在 EF 中映射结果列来工作。
它可以正常工作,除非两个不同的键具有相同的序列号示例:
id | location | type
1 | 10 | 11
1 | 10 | 10
编辑:当我同时创建两个新行时会发生此错误。
它们的下一个值是 2,数据被保存到数据库中,但应用程序失败并显示以下消息:
对数据库的更改已成功提交,但在更新对象上下文时出错。ObjectContext 可能处于不一致的状态。
内部异常消息:
AcceptChanges 无法继续,因为对象的键值与 ObjectStateManager 中的另一个对象冲突。
在调用 AcceptChanges 之前确保键值是唯一的。
有什么建议吗?
编辑存储过程示例
声明 @nextNumber int
SELECT @nextNumber = value + 1 FROM SEQUENTIAL_TABLE WHERE location = @location 和 type=@type
插入表(位置,类型,id,......)值(@location,@type,@nextnumber,......)
UPDATE SEQUENTIAL_TABLE SET value = @nextNumber WHERE location = @location and type=@type
选择 @nextNumber 作为 [NextNumber]