我使用DataSet
/ DataTable
/ DataAdapter
体系结构的数据库和我的模型对象,它们有自己的支持(它们不是由一个DataRow支持)之间进行调解。 我有一个DataAdapter
与AcceptChangesDuringFill = False
, AcceptChangesDuringUpdate = False
,并FillLoadOption = OverwriteChanges
。 这是我的理解DataAdapter
这些条件下的模型:
DataAdapter.Update()
-
DataRowState.Added
将导致InsertCommand
射击 -
DataRowState.Modified
将导致UpdateCommand
发射 -
DataRowState.Deleted
将导致DeleteCommand
射击
DataAdapter.Fill方法()
- 在返回的结果集,其主键对应于现有行的任何行
DataTable
将用于更新该行,该行的状态会一直变DataRowState.Modified
, 即使返回的行与当前行 - 在返回的结果集,其主键不对应于任何现有的行会被用来创建一个新的行中的任意行,该行的状态将成为
DataRowState.Added
- 在任何行
DataTable
不对应的行中返回的结果集将留在DataRowState.Unchanged
鉴于我与这个心智模式是正确的,假设我想用Fill()
注意在数据源中删除的行。 此外,假设参数SelectCommand
不返回整个表。 我猜,我有两个选择:
- 查找应该已经被更新的所有行
Fill()
但仍然DataRowState.Unchanged
(以上依靠未经检验我的假设斜体)。 这些行已经在数据源中被删除。 - 清除从所有相关行
DataTable
的前Fill()
; 以后不会再出现任何行已经在数据源中被删除。 这失去的区别DataRowState.Added
和DataRowState.Modified
被保留与第一种方法。
所以,我的问题:
- 是我上面的模型
DataAdapter
是正确的,符合我在上面提到的属性值? - 我应该去找到删除的行哪个选项? 我更喜欢第一个,但是这依赖于我的假设,即所有返回的行会被设置为
DataRowState.Modified
即使该行是相同的; 是一个安全的假设? - 我要对所有这一切错了吗?