title: What is the difference between IEditableObject and IRevertibleChangeTracking?
body: <p>What is the difference between <a href="http://msdn.microsoft.com/en-us/library/dkk51tdc(v=VS.100).aspx" rel="noreferrer">IEditableObject</a> and <a href="http://msdn.microsoft.com/en-us/library/afc366x8(v=VS.100).aspx" rel="noreferrer">IRevertibleChangeTracking</a> (both from the System.ComponentModel namespace)?  It looks as if the first supports explicit transaction whilst the second is more implicit - but the net result is the same.  How should I go about implementing this in code?  At the moment I do nothing in <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ieditableobject.beginedit(v=VS.100).aspx" rel="noreferrer">BeginEdit</a> and call <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.irevertiblechangetracking.rejectchanges(v=VS.100).aspx" rel="noreferrer">RejectChanges</a> and <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ichangetracking.acceptchanges(v=VS.100).aspx" rel="noreferrer">AcceptChanges</a> in <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ieditableobject.endedit(v=VS.100).aspx" rel="noreferrer">EndEdit</a> and <a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.ieditableobject.canceledit(v=VS.100).aspx" rel="noreferrer">CancelEdit</a> respectively.  My problem is that this will also accept the changes made prior to the BeginEdit.</p>
  
  <p>Is that really what Microsoft wanted or am I trying to implement two mutually exclusive interfaces?</p>