我正在使用DataSet
//体系结构在数据库DataTable
和DataAdapter
我的模型对象之间进行调解,这些对象有自己的支持(它们不受 DataRow 支持)。我有一个DataAdapter
with AcceptChangesDuringFill = False
, AcceptChangesDuringUpdate = False
, and FillLoadOption = OverwriteChanges
。以下是我DataAdapter
在这些条件下对模型的理解:
DataAdapter.Update()
DataRowState.Added
会导致InsertCommand
开火DataRowState.Modified
会导致UpdateCommand
开火DataRowState.Deleted
会导致DeleteCommand
开火
数据适配器.Fill()
- 返回结果集中的任何行,其主键对应于 中的现有行将
DataTable
用于更新该行,并且该行的状态将始终变为DataRowState.Modified
,即使返回的行与当前行相同 - 返回的结果集中任何主键不对应任何现有行的行都将用于创建新行,该行的状态将变为
DataRowState.Added
DataTable
与返回结果集中的行不对应的任何行都将保留在DataRowState.Unchanged
鉴于我对这个心智模型是正确的,假设我想用它Fill()
来注意数据源中已删除的行。另外,假设 的参数SelectCommand
不返回整个表。我猜我有两个选择:
- 找到所有应该由 更新
Fill()
但仍然存在的行DataRowState.Unchanged
(依赖于我上面未经测试的斜体假设)。这些行已在数据源中删除。 - 清除;
DataTable
之前的所有相关行Fill()
任何不再显示的行都已在数据源中删除。DataRowState.Added
这失去了与DataRowState.Modified
第一种方法保留的区别。
所以,我的问题:
- 我的上述模型是否
DataAdapter
正确,取决于我在顶部记录的属性值? - 我应该使用哪个选项来查找已删除的行?我更喜欢第一个,但这取决于我的假设,即所有返回的行都将设置为
DataRowState.Modified
即使该行相同;这是一个安全的假设吗? - 我对这一切都错了吗?