在DataSet
(和相关对象)的旧时代,数据对象的内存中表示 - DataRow
和DataRowView
- 支持通过{{进行的事务编辑1}},BeginEdit
和EndEdit
。两者都允许不仅仅是能够“撤消”对对象所做的更改并将其还原回其检索到的(或未初始化的)值; CancelEdit
对象允许开发人员在任何状态的DataRowView
上开始单个编辑操作,并撤消这些更改,而不撤消可能已经进行的其他更改。
例如,
DataRow
检索为:
DataRow
Col1 | Col2
----------------
1 2
修改为:
DataRow
Col1 | Col2
----------------
1 3
为此行调用BeginEdit
个对象。
DataRowView
修改为:
DataRowView
Col1 | Col2
----------------
2 3
调用CancelEdit
,将值恢复为
DataRowView
所以更改已撤消,但编辑前出现的值 - 即使它们是内存中的更改而不是检索到的值 - 也会被保留。
实体框架中是否有类似的设施?我怀疑答案是“不”,考虑到它看起来Col1 | Col2
----------------
1 3
使用简单的支持变量作为列值,而不是Entity
使用的“属性包”方法(或WPF的DataRow
基础设施使用)。
答案 0 :(得分:0)
根据您需要的事务支持深度,有两种方法可以与Entity Framework进行交易。
关于您在问题的最后一段中的推测:在EF 1中,更改跟踪信息通常存储在ObjectContext中。在EF 4中,您可以选择使用所谓的“自我跟踪”实体或代理,它们的行为更符合您的预期。但我认为,默认情况下仍然会像EF 1一样。如果查看生成的EDMX文件的C#代码,您将看到属性更改通知的工作原理。
答案 1 :(得分:0)
您可以在实体上实现IEditableObject。
有关示例,请参阅here。