PageRenderTime 45ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/DMS/Implementacion/PaucarpataSolution/PPR.Data/PersonalDBModel.cs

http://ppp-eym.googlecode.com/
C# | 415 lines | 328 code | 53 blank | 34 comment | 54 complexity | 1fec2d0e3a0d0141f47b8b7f53c0f3ea MD5 | raw file
  1. //------------------------------------------------------------------------------
  2. // <auto-generated>
  3. // This code was generated from a template.
  4. //
  5. // Changes to this file may cause incorrect behavior and will be lost if
  6. // the code is regenerated.
  7. // </auto-generated>
  8. //------------------------------------------------------------------------------
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Collections.ObjectModel;
  12. using System.Collections.Specialized;
  13. using System.ComponentModel;
  14. using System.Globalization;
  15. using System.Runtime.Serialization;
  16. namespace PPR.Data
  17. {
  18. // Helper class that captures most of the change tracking work that needs to be done
  19. // for self tracking entities.
  20. [DataContract(IsReference = true)]
  21. public class ObjectChangeTracker
  22. {
  23. #region Fields
  24. private bool _isDeserializing;
  25. private ObjectState _objectState = ObjectState.Added;
  26. private bool _changeTrackingEnabled;
  27. private OriginalValuesDictionary _originalValues;
  28. private ExtendedPropertiesDictionary _extendedProperties;
  29. private ObjectsAddedToCollectionProperties _objectsAddedToCollections = new ObjectsAddedToCollectionProperties();
  30. private ObjectsRemovedFromCollectionProperties _objectsRemovedFromCollections = new ObjectsRemovedFromCollectionProperties();
  31. #endregion
  32. #region Events
  33. public event EventHandler<ObjectStateChangingEventArgs> ObjectStateChanging;
  34. #endregion
  35. protected virtual void OnObjectStateChanging(ObjectState newState)
  36. {
  37. if (ObjectStateChanging != null)
  38. {
  39. ObjectStateChanging(this, new ObjectStateChangingEventArgs(){ NewState = newState });
  40. }
  41. }
  42. [DataMember]
  43. public ObjectState State
  44. {
  45. get { return _objectState; }
  46. set
  47. {
  48. if (_isDeserializing || _changeTrackingEnabled)
  49. {
  50. OnObjectStateChanging(value);
  51. _objectState = value;
  52. }
  53. }
  54. }
  55. public bool ChangeTrackingEnabled
  56. {
  57. get { return _changeTrackingEnabled; }
  58. set { _changeTrackingEnabled = value; }
  59. }
  60. // Returns the removed objects to collection valued properties that were changed.
  61. [DataMember]
  62. public ObjectsRemovedFromCollectionProperties ObjectsRemovedFromCollectionProperties
  63. {
  64. get
  65. {
  66. if (_objectsRemovedFromCollections == null)
  67. {
  68. _objectsRemovedFromCollections = new ObjectsRemovedFromCollectionProperties();
  69. }
  70. return _objectsRemovedFromCollections;
  71. }
  72. }
  73. // Returns the original values for properties that were changed.
  74. [DataMember]
  75. public OriginalValuesDictionary OriginalValues
  76. {
  77. get
  78. {
  79. if (_originalValues == null)
  80. {
  81. _originalValues = new OriginalValuesDictionary();
  82. }
  83. return _originalValues;
  84. }
  85. }
  86. // Returns the extended property values.
  87. // This includes key values for independent associations that are needed for the
  88. // concurrency model in the Entity Framework
  89. [DataMember]
  90. public ExtendedPropertiesDictionary ExtendedProperties
  91. {
  92. get
  93. {
  94. if (_extendedProperties == null)
  95. {
  96. _extendedProperties = new ExtendedPropertiesDictionary();
  97. }
  98. return _extendedProperties;
  99. }
  100. }
  101. // Returns the added objects to collection valued properties that were changed.
  102. [DataMember]
  103. public ObjectsAddedToCollectionProperties ObjectsAddedToCollectionProperties
  104. {
  105. get
  106. {
  107. if (_objectsAddedToCollections == null)
  108. {
  109. _objectsAddedToCollections = new ObjectsAddedToCollectionProperties();
  110. }
  111. return _objectsAddedToCollections;
  112. }
  113. }
  114. #region MethodsForChangeTrackingOnClient
  115. [OnDeserializing]
  116. public void OnDeserializingMethod(StreamingContext context)
  117. {
  118. _isDeserializing = true;
  119. }
  120. [OnDeserialized]
  121. public void OnDeserializedMethod(StreamingContext context)
  122. {
  123. _isDeserializing = false;
  124. }
  125. // Resets the ObjectChangeTracker to the Unchanged state and
  126. // clears the original values as well as the record of changes
  127. // to collection properties
  128. public void AcceptChanges()
  129. {
  130. OnObjectStateChanging(ObjectState.Unchanged);
  131. OriginalValues.Clear();
  132. ObjectsAddedToCollectionProperties.Clear();
  133. ObjectsRemovedFromCollectionProperties.Clear();
  134. ChangeTrackingEnabled = true;
  135. _objectState = ObjectState.Unchanged;
  136. }
  137. // Captures the original value for a property that is changing.
  138. internal void RecordOriginalValue(string propertyName, object value)
  139. {
  140. if (_changeTrackingEnabled && _objectState != ObjectState.Added)
  141. {
  142. if (!OriginalValues.ContainsKey(propertyName))
  143. {
  144. OriginalValues[propertyName] = value;
  145. }
  146. }
  147. }
  148. // Records an addition to collection valued properties on SelfTracking Entities.
  149. internal void RecordAdditionToCollectionProperties(string propertyName, object value)
  150. {
  151. if (_changeTrackingEnabled)
  152. {
  153. // Add the entity back after deleting it, we should do nothing here then
  154. if (ObjectsRemovedFromCollectionProperties.ContainsKey(propertyName)
  155. && ObjectsRemovedFromCollectionProperties[propertyName].Contains(value))
  156. {
  157. ObjectsRemovedFromCollectionProperties[propertyName].Remove(value);
  158. if (ObjectsRemovedFromCollectionProperties[propertyName].Count == 0)
  159. {
  160. ObjectsRemovedFromCollectionProperties.Remove(propertyName);
  161. }
  162. return;
  163. }
  164. if (!ObjectsAddedToCollectionProperties.ContainsKey(propertyName))
  165. {
  166. ObjectsAddedToCollectionProperties[propertyName] = new ObjectList();
  167. ObjectsAddedToCollectionProperties[propertyName].Add(value);
  168. }
  169. else
  170. {
  171. ObjectsAddedToCollectionProperties[propertyName].Add(value);
  172. }
  173. }
  174. }
  175. // Records a removal to collection valued properties on SelfTracking Entities.
  176. internal void RecordRemovalFromCollectionProperties(string propertyName, object value)
  177. {
  178. if (_changeTrackingEnabled)
  179. {
  180. // Delete the entity back after adding it, we should do nothing here then
  181. if (ObjectsAddedToCollectionProperties.ContainsKey(propertyName)
  182. && ObjectsAddedToCollectionProperties[propertyName].Contains(value))
  183. {
  184. ObjectsAddedToCollectionProperties[propertyName].Remove(value);
  185. if (ObjectsAddedToCollectionProperties[propertyName].Count == 0)
  186. {
  187. ObjectsAddedToCollectionProperties.Remove(propertyName);
  188. }
  189. return;
  190. }
  191. if (!ObjectsRemovedFromCollectionProperties.ContainsKey(propertyName))
  192. {
  193. ObjectsRemovedFromCollectionProperties[propertyName] = new ObjectList();
  194. ObjectsRemovedFromCollectionProperties[propertyName].Add(value);
  195. }
  196. else
  197. {
  198. if (!ObjectsRemovedFromCollectionProperties[propertyName].Contains(value))
  199. {
  200. ObjectsRemovedFromCollectionProperties[propertyName].Add(value);
  201. }
  202. }
  203. }
  204. }
  205. #endregion
  206. }
  207. #region EnumForObjectState
  208. [Flags]
  209. public enum ObjectState
  210. {
  211. Unchanged = 0x1,
  212. Added = 0x2,
  213. Modified = 0x4,
  214. Deleted = 0x8
  215. }
  216. #endregion
  217. [CollectionDataContract (Name = "ObjectsAddedToCollectionProperties",
  218. ItemName = "AddedObjectsForProperty", KeyName = "CollectionPropertyName", ValueName = "AddedObjects")]
  219. public class ObjectsAddedToCollectionProperties : Dictionary<string, ObjectList> { }
  220. [CollectionDataContract (Name = "ObjectsRemovedFromCollectionProperties",
  221. ItemName = "DeletedObjectsForProperty", KeyName = "CollectionPropertyName",ValueName = "DeletedObjects")]
  222. public class ObjectsRemovedFromCollectionProperties : Dictionary<string, ObjectList> { }
  223. [CollectionDataContract(Name = "OriginalValuesDictionary",
  224. ItemName = "OriginalValues", KeyName = "Name", ValueName = "OriginalValue")]
  225. public class OriginalValuesDictionary : Dictionary<string, Object> { }
  226. [CollectionDataContract(Name = "ExtendedPropertiesDictionary",
  227. ItemName = "ExtendedProperties", KeyName = "Name", ValueName = "ExtendedProperty")]
  228. public class ExtendedPropertiesDictionary : Dictionary<string, Object> { }
  229. [CollectionDataContract(ItemName = "ObjectValue")]
  230. public class ObjectList : List<object> { }
  231. // The interface is implemented by the self tracking entities that EF will generate.
  232. // We will have an Adapter that converts this interface to the interface that the EF expects.
  233. // The Adapter will live on the server side.
  234. public interface IObjectWithChangeTracker
  235. {
  236. // Has all the change tracking information for the subgraph of a given object.
  237. ObjectChangeTracker ChangeTracker { get; }
  238. }
  239. public class ObjectStateChangingEventArgs : EventArgs
  240. {
  241. public ObjectState NewState { get; set; }
  242. }
  243. public static class ObjectWithChangeTrackerExtensions
  244. {
  245. public static T MarkAsDeleted<T>(this T trackingItem) where T : IObjectWithChangeTracker
  246. {
  247. if (trackingItem == null)
  248. {
  249. throw new ArgumentNullException("trackingItem");
  250. }
  251. trackingItem.ChangeTracker.ChangeTrackingEnabled = true;
  252. trackingItem.ChangeTracker.State = ObjectState.Deleted;
  253. return trackingItem;
  254. }
  255. public static T MarkAsAdded<T>(this T trackingItem) where T : IObjectWithChangeTracker
  256. {
  257. if (trackingItem == null)
  258. {
  259. throw new ArgumentNullException("trackingItem");
  260. }
  261. trackingItem.ChangeTracker.ChangeTrackingEnabled = true;
  262. trackingItem.ChangeTracker.State = ObjectState.Added;
  263. return trackingItem;
  264. }
  265. public static T MarkAsModified<T>(this T trackingItem) where T : IObjectWithChangeTracker
  266. {
  267. if (trackingItem == null)
  268. {
  269. throw new ArgumentNullException("trackingItem");
  270. }
  271. trackingItem.ChangeTracker.ChangeTrackingEnabled = true;
  272. trackingItem.ChangeTracker.State = ObjectState.Modified;
  273. return trackingItem;
  274. }
  275. public static T MarkAsUnchanged<T>(this T trackingItem) where T : IObjectWithChangeTracker
  276. {
  277. if (trackingItem == null)
  278. {
  279. throw new ArgumentNullException("trackingItem");
  280. }
  281. trackingItem.ChangeTracker.ChangeTrackingEnabled = true;
  282. trackingItem.ChangeTracker.State = ObjectState.Unchanged;
  283. return trackingItem;
  284. }
  285. public static void StartTracking(this IObjectWithChangeTracker trackingItem)
  286. {
  287. if (trackingItem == null)
  288. {
  289. throw new ArgumentNullException("trackingItem");
  290. }
  291. trackingItem.ChangeTracker.ChangeTrackingEnabled = true;
  292. }
  293. public static void StopTracking(this IObjectWithChangeTracker trackingItem)
  294. {
  295. if (trackingItem == null)
  296. {
  297. throw new ArgumentNullException("trackingItem");
  298. }
  299. trackingItem.ChangeTracker.ChangeTrackingEnabled = false;
  300. }
  301. public static void AcceptChanges(this IObjectWithChangeTracker trackingItem)
  302. {
  303. if (trackingItem == null)
  304. {
  305. throw new ArgumentNullException("trackingItem");
  306. }
  307. trackingItem.ChangeTracker.AcceptChanges();
  308. }
  309. }
  310. // An System.Collections.ObjectModel.ObservableCollection that raises
  311. // individual item removal notifications on clear and prevents adding duplicates.
  312. public class TrackableCollection<T> : ObservableCollection<T>
  313. {
  314. protected override void ClearItems()
  315. {
  316. new List<T>(this).ForEach(t => Remove(t));
  317. }
  318. protected override void InsertItem(int index, T item)
  319. {
  320. if (!this.Contains(item))
  321. {
  322. base.InsertItem(index, item);
  323. }
  324. }
  325. }
  326. // An interface that provides an event that fires when complex properties change.
  327. // Changes can be the replacement of a complex property with a new complex type instance or
  328. // a change to a scalar property within a complex type instance.
  329. public interface INotifyComplexPropertyChanging
  330. {
  331. event EventHandler ComplexPropertyChanging;
  332. }
  333. public static class EqualityComparer
  334. {
  335. // Helper method to determine if two byte arrays are the same value even if they are different object references
  336. public static bool BinaryEquals(object binaryValue1, object binaryValue2)
  337. {
  338. if (Object.ReferenceEquals(binaryValue1, binaryValue2))
  339. {
  340. return true;
  341. }
  342. byte[] array1 = binaryValue1 as byte[];
  343. byte[] array2 = binaryValue2 as byte[];
  344. if (array1 != null && array2 != null)
  345. {
  346. if (array1.Length != array2.Length)
  347. {
  348. return false;
  349. }
  350. for (int i = 0; i < array1.Length; i++)
  351. {
  352. if (array1[i] != array2[i])
  353. {
  354. return false;
  355. }
  356. }
  357. return true;
  358. }
  359. return false;
  360. }
  361. }
  362. }