Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 29th, 2012  |  syntax: None  |  size: 1.58 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. NHibernate: Mapping class with generic enum property
  2. public class StateMachineMetadata<T> where T: struct
  3. {
  4.     public virtual int ID { get; protected set; }
  5.     public virtual T State { get; set; }
  6.     public virtual DateTime DateChanged { get; set; }
  7. }
  8.        
  9. public enum CarState
  10. {
  11.     Stopped = 1,
  12.     Moving = 2
  13. }
  14. public enum OrderState
  15. {
  16.     Ordered = 1,
  17.     Delivered = 2
  18. }
  19.        
  20. StateMachineMetadata<CarState>, StateMachineMetadata<OrderState>
  21.        
  22. public interface IStateMachineMetadata<T> where T: struct
  23. {
  24.     int ID { get; }
  25.     T State { get; set; }
  26.     DateTime DateChanged { get; set; }
  27. }
  28.  
  29. public class StateMachineMetadataBase
  30. {
  31.     public virtual int ID { get; protected set; }
  32.     public virtual DateTime DateChanged { get; set; }
  33. }
  34.  
  35. public class CarStateMachineMetadata
  36.     : StateMachineMetadataBase, IStateMachineMetadata<CarState>
  37. {
  38.     public virtual CarState State { get; set; }
  39. }
  40.        
  41. ID | State | DateChanged
  42. 1  |   1   |  2012-02-13
  43. 2  |   1   |  2012-02-14
  44.        
  45. ID | State | DateChanged | Type
  46. 1  |   1   |  2012-02-13    1
  47. 2  |   1   |  2012-02-14    2
  48.        
  49. <?xml version="1.0" encoding="utf-8" ?>
  50. <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  51.            assembly="MyAssembly"
  52.            namespace="MyNamespace">
  53.     <class name="StateMachineMetadata`1[MyNamespace.CarState]"
  54.            table="StateMachineMetadata_CarState">
  55.         <!-- property to column mappings -->
  56.     </class>
  57.  
  58.     <class name="StateMachineMetadata`1[MyNamespace.OrderState]"
  59.            table="StateMachineMetadata_OrderState">
  60.         <!-- property to column mappings -->
  61.     </class>
  62. </hibernate-mapping>