我在一个类型化的数据集中有一个多对多的关系表。 为了方便更新,我在添加新的之前删除旧的关系(可能与之前一样)。DataTable:在插入新安全文件之前删除旧的DataRows?
现在我不知道,如果这种方式是故障保护,或者我应该确保只有删除被真正删除(例如使用LINQ)和只添加一个这是真正的新。
在SQL-Server是关系表中定义的唯一约束,这两个外键是一个复合主键。
是DataAdapter的更新它的RowState是<>不变预见或没有数据行的顺序? 换句话说:DataAdapter.Update(DataTable)
是否有可能在密钥已经存在时导致异常?
这是数据模型:
这是部分的代码(LbSymptomCodes
是一个ASP.Net列表框):
Dim daTrelRmaSymptomCode As New ERPModel.dsRMATableAdapters.trelRMA_SymptomCodeTableAdapter
For Each oldTrelRmaSymptomCodeRow As ERPModel.dsRMA.trelRMA_SymptomCodeRow In thisRMA.GettrelRMA_SymptomCodeRows
oldTrelRmaSymptomCodeRow.Delete()
Next
For Each item As ListItem In LbSymptomCodes.Items
If item.Selected Then
Dim newTrelRmaSymptomCodeRow As ERPModel.dsRMA.trelRMA_SymptomCodeRow = Services.dsRMA.trelRMA_SymptomCode.NewtrelRMA_SymptomCodeRow
newTrelRmaSymptomCodeRow.fiRMA = Services.IdRma
newTrelRmaSymptomCodeRow.fiSymptomCode = CInt(item.Value)
Services.dsRMA.trelRMA_SymptomCode.AddtrelRMA_SymptomCodeRow(newTrelRmaSymptomCodeRow)
End If
Next
daTrelRmaSymptomCode.Update(Services.dsRMA.trelRMA_SymptomCode)
预先感谢您。
谢谢。但是这会导致三个数据库调用(和三个事务)而不是一个。当更新在已删除行和已更改行上的已接受更改的已添加行上失败时,我无法RejectChanges。 – 2011-04-20 09:21:03
@TimSchmelter:如果发生任何错误,您不能在try/catch块中的单个事务中包装所有更新以回滚吗? – codingbadger 2011-04-20 09:45:51
可能但困难,因为在类型化数据集中,此逻辑封装在自动生成的TableAdapter中。我必须将这些适配器扩展到与自动生成的文件不同的文件中的部分类中,并公开DataAdapter本身以提供事务。但我很乐意避免这种额外的努力;) – 2011-04-20 11:29:53