【发布时间】:2010-08-17 16:14:41
【问题描述】:
基本上我有一个包含分层数据的表。
所以我有一个 id 列和一个汇总列,它指向每个孩子的父母的 id 列。
使用 TableAdapter 上的 GetData() 从数据库加载该表,然后使用以下方法设置表的主键自动增量:
SELECT IDENT_CURRENT('TableName') + 1
在层次结构中创建新的孩子,然后我在同一个 TableAdapter 上调用 Update()。
大多数情况下这工作得很好,但偶尔我会得到 ContraintException 列“id”被限制为唯一问题,而且它似乎只在添加新行时发生。
通常,我只需将 autoincrementseed 和 autoincrementstep 设置为 -1 并在更新 id 列后从数据库中获取正确的值,但是因为汇总列取决于主键值,所以这将不起作用。
我也无法实时应用每个新行,因为所有更改作为一个整体必须由用户审核,然后才能应用到数据库。
有什么想法吗?
编辑:我应该提一下,没有其他任何更改来自任何其他来源,因此这里没有并发问题。
另一个编辑:今天我在调用更新方法之前检查了表中的值,并注意到问题与新行没有按主键正确排序有关。
例如,行数为 960,961,963,962,当插入 962 时,我得到了 962 已经存在的错误。如果更新按顺序插入行,就不会发生这种情况。
为什么表不按主键顺序索引行?
【问题讨论】:
标签: .net sql-server hierarchical-data strongly-typed-dataset tableadapter