Advertisement
Guest User

Untitled

a guest
Nov 25th, 2014
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 KB | None | 0 0
  1. IEntity
  2. User : IEntity
  3. Vehicle : IEntity
  4.  
  5. public class NHibernateListener : IPreInsertEventListener, IPreUpdateEventListener
  6. {
  7. private static readonly string CreatedPropertyName = GetPropertyName<IEntity>(val => val.Created);
  8. private static readonly string CreatorPropertyName = GetPropertyName<IEntity>(val => val.Creator);
  9. private static readonly string UpdatedPropertyName = GetPropertyName<IEntity>(val => val.Updated);
  10. private static readonly string UpdaterPropertyName = GetPropertyName<IEntity>(val => val.Updater);
  11.  
  12. public bool OnPreInsert(PreInsertEvent @event)
  13. {
  14. IEntity entity;
  15. if ((entity = @event.Entity as IEntity) != null)
  16. {
  17. var currentDate = DateTime.Now;
  18. entity.Created = entity.Updated = currentDate;
  19.  
  20. if (User.CurrentUser != null)
  21. {
  22. entity.Creator = entity.Updater = User.CurrentUser;
  23. Set(@event.Persister, @event.State, CreatorPropertyName, currentDate);
  24. Set(@event.Persister, @event.State, UpdaterPropertyName, currentDate);
  25. }
  26.  
  27. Set(@event.Persister, @event.State, CreatedPropertyName, currentDate);
  28. Set(@event.Persister, @event.State, UpdatedPropertyName, currentDate);
  29. }
  30. return false;
  31. }
  32.  
  33. public bool OnPreUpdate(PreUpdateEvent @event)
  34. {
  35. IEntity entity;
  36. if ((entity = @event.Entity as IEntity) != null)
  37. {
  38. var currentDate = DateTime.Now;
  39. entity.Updated = currentDate;
  40.  
  41. if (User.CurrentUser != null)
  42. {
  43. entity.Creator = entity.Updater = User.CurrentUser;
  44. Set(@event.Persister, @event.State, UpdaterPropertyName, currentDate);
  45. }
  46.  
  47. Set(@event.Persister, @event.State, UpdatedPropertyName, currentDate);
  48. }
  49. return false;
  50. }
  51.  
  52. private void Set(IEntityPersister persister, object[] state, string propertyName, object value)
  53. {
  54. var index = Array.IndexOf(persister.PropertyNames, propertyName);
  55. if (index == -1)
  56. return;
  57. state[index] = value;
  58. }
  59. private static string GetPropertyName<TType>(Expression<Func<TType, object>> expression)
  60. {
  61. return ExpressionProcessor.FindPropertyExpression(expression.Body);
  62. }
  63.  
  64. }
  65.  
  66. public enum Status
  67. {
  68. Active,
  69. Inactive
  70. }
  71.  
  72. public interface IEntity
  73. {
  74. Guid Id { get; }
  75. DateTime Created { get; set; }
  76. User Creator { get; set; }
  77. DateTime Updated { get; set; }
  78. User Updater { get; set; }
  79. Status Status { get; set; }
  80.  
  81. }
  82.  
  83. public class User : IEntity
  84. {
  85. public static User CurrentUser { get; set; }
  86.  
  87. public virtual string Email { get; protected set; }
  88. public virtual Guid Id { get; protected set; }
  89. public virtual DateTime Created { get; set; }
  90. public virtual User Creator { get; set; }
  91. public virtual DateTime Updated { get; set; }
  92. public virtual User Updater { get; set; }
  93. public virtual Status Status { get; set; }
  94. public virtual string FirstName { get; protected set; }
  95. public virtual string LastName { get; protected set; }
  96. public virtual IEnumerable<Vehicle> Vehicles { get; protected set; }
  97.  
  98. protected User()
  99. {
  100. }
  101.  
  102. public User(Guid id, string email, string firstName, string lastName)
  103. {
  104. Id = id;
  105. FirstName = firstName;
  106. LastName = lastName;
  107. Email = email;
  108. }
  109.  
  110. public virtual void AddVehicle(Vehicle vehicle)
  111. {
  112. ((IList<Vehicle>) Vehicles).Add(vehicle);
  113. vehicle.AddUser(this);
  114. }
  115. }
  116.  
  117. public class Vehicle : IEntity
  118. {
  119. protected Vehicle()
  120. {
  121. }
  122.  
  123. public Vehicle(Guid id, string make, string model, string color)
  124. {
  125. Id = id;
  126. Make = make;
  127. Model = model;
  128. Color = color;
  129. Users = new List<User>();
  130. }
  131.  
  132. public virtual string Make{ get; set; }
  133. public virtual string Model{ get; set; }
  134. public virtual string Color { get; set; }
  135. public virtual IEnumerable<User> Users { get; protected set; }
  136. public virtual Guid Id { get; set; }
  137. public virtual DateTime Created { get; set; }
  138. public virtual User Creator { get; set; }
  139. public virtual DateTime Updated { get; set; }
  140. public virtual User Updater { get; set; }
  141. public virtual Status Status { get; set; }
  142.  
  143. protected internal virtual void AddUser(User user)
  144. {
  145. ((IList<User>) Users).Add(user);
  146. }
  147. }
  148.  
  149. Message: Error dehydrating property value for MyApp.Domain.Users.User.Creator
  150.  
  151. Inner Exception: Exception occurred getter of MyApp.Domain.Users.User.Id
  152.  
  153. Inner Inner Exception: Object does not match target type.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement