Mercurial > altnet-hispano
comparison Agendas/trunk/src/Agendas.NHibernate/GenericWellKnownInstanceType.cs @ 140:3639803112c6
Refactoring de la relación entre Evento y Estado
author | nelopauselli |
---|---|
date | Fri, 29 Jul 2011 16:30:53 -0300 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
139:18e5a78186e4 | 140:3639803112c6 |
---|---|
1 using System; | |
2 using System.Collections.Generic; | |
3 using System.Data; | |
4 using System.Linq; | |
5 using NHibernate.SqlTypes; | |
6 using NHibernate.UserTypes; | |
7 | |
8 namespace Agendas.NHibernate | |
9 { | |
10 [Serializable] | |
11 public abstract class GenericWellKnownInstanceType<T, TId> : IUserType where T : class | |
12 { | |
13 //private static readonly SqlType[] ReturnSqlTypes = { SqlTypeFactory.Int32 }; | |
14 private Func<T, TId, bool> findPredicate; | |
15 private Func<T, TId> idGetter; | |
16 private IEnumerable<T> repository; | |
17 | |
18 /// <summary> | |
19 /// Base constructor | |
20 /// </summary> | |
21 /// <param name="repository">The collection that represent a in-memory repository.</param> | |
22 /// <param name="findPredicate">The predicate an instance by the persisted value.</param> | |
23 /// <param name="idGetter">The getter of the persisted value.</param> | |
24 protected GenericWellKnownInstanceType(IEnumerable<T> repository, Func<T, TId, bool> findPredicate, Func<T, TId> idGetter) | |
25 { | |
26 this.repository = repository; | |
27 this.findPredicate = findPredicate; | |
28 this.idGetter = idGetter; | |
29 } | |
30 | |
31 //public SqlType[] SqlTypes | |
32 //{ | |
33 // get { return ReturnSqlTypes; } | |
34 //} | |
35 | |
36 public Type ReturnedType | |
37 { | |
38 get { return typeof(T); } | |
39 } | |
40 | |
41 public bool IsMutable | |
42 { | |
43 get { return false; } | |
44 } | |
45 | |
46 public new bool Equals(object x, object y) | |
47 { | |
48 if (ReferenceEquals(x, y)) | |
49 { | |
50 return true; | |
51 } | |
52 if (ReferenceEquals(null, x) || ReferenceEquals(null, y)) | |
53 { | |
54 return false; | |
55 } | |
56 | |
57 return x.Equals(y); | |
58 } | |
59 | |
60 public int GetHashCode(object x) | |
61 { | |
62 return (x == null) ? 0 : x.GetHashCode(); | |
63 } | |
64 | |
65 public object NullSafeGet(IDataReader rs, string[] names, object owner) | |
66 { | |
67 int index0 = rs.GetOrdinal(names[0]); | |
68 if (rs.IsDBNull(index0)) | |
69 { | |
70 return null; | |
71 } | |
72 | |
73 var value = (TId)rs.GetValue(index0); | |
74 return repository.FirstOrDefault(x => findPredicate(x, value)); | |
75 } | |
76 | |
77 public void NullSafeSet(IDbCommand cmd, object value, int index) | |
78 { | |
79 if (value == null) | |
80 { | |
81 ((IDbDataParameter)cmd.Parameters[index]).Value = DBNull.Value; | |
82 } | |
83 else | |
84 { | |
85 ((IDbDataParameter)cmd.Parameters[index]).Value = idGetter((T)value); | |
86 } | |
87 } | |
88 | |
89 public object DeepCopy(object value) | |
90 { | |
91 return value; | |
92 } | |
93 | |
94 public object Replace(object original, object target, object owner) | |
95 { | |
96 return original; | |
97 } | |
98 | |
99 public object Assemble(object cached, object owner) | |
100 { | |
101 return cached; | |
102 } | |
103 | |
104 public object Disassemble(object value) | |
105 { | |
106 return value; | |
107 } | |
108 | |
109 /// <summary> | |
110 /// The SQL types for the columns mapped by this type. | |
111 /// </summary> | |
112 public abstract SqlType[] SqlTypes { get; } | |
113 } | |
114 } |