我在使用DataTable时发现了这个错误。 我向DataTable添加了主键列,而不是向该表中添加了一行,删除了该行,并向表中添加了具有相同键的行。这工作。当我试图打电话给RejectChanges()
时,我得到ConstraintException
表示价值已经存在。 这里是例子:DataTable在RejectChanges上抛出异常
var dataTable = new DataTable();
var column = new DataColumn("ID", typeof(decimal));
dataTable.Columns.Add(column);
dataTable.PrimaryKey = new [] {column };
decimal id = 1;
var oldRow = dataTable.NewRow();
oldRow[column] = id;
dataTable.Rows.Add(oldRow);
dataTable.AcceptChanges();
oldRow.Delete();
var newRow = dataTable.NewRow();
newRow[column] = id;
dataTable.Rows.Add(newRow);
dataTable.RejectChanges(); // This is where it crashes
我认为,因为行被删除,例外不应随意(约束没有违反,因为行处于删除状态)。我能做些什么吗?任何帮助表示赞赏。
这是类似的东西,但我不认为它应该以相反的顺序回滚。它应该首先拒绝“未删除”行上的更改,而不是删除。 – Vale 2012-03-19 10:05:01
第二个解决方法将起作用(但您如何禁用约束)。首先不是一个通用的解决方案,因为用户可以删除最后一行,而不是更改前一行的id。 – Vale 2012-03-19 10:21:01
@Vale:编辑我的答案,显示如何强制执行正确的回滚顺序。 – 2012-03-19 10:23:05