Mercurial > pub > bltoolkit
comparison Tools/CodeGenerator/ValueMapping.Declare.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Data.SqlTypes; | |
3 | |
4 using KeyValue = System.Collections.Generic.KeyValuePair<System.Type, System.Type>; | |
5 using Table = System.Collections.Generic.Dictionary<System.Collections.Generic.KeyValuePair<System.Type, System.Type>, BLToolkit.Mapping.IValueMapper>; | |
6 | |
7 namespace BLToolkit.Mapping | |
8 { | |
9 [CLSCompliant(false)] | |
10 public interface IMapDataSource | |
11 { | |
12 int Count { get; } | |
13 | |
14 Type GetFieldType (int index); | |
15 string GetName (int index); | |
16 int GetOrdinal (string name); | |
17 object GetValue (object o, int index); | |
18 object GetValue (object o, string name); | |
19 | |
20 bool IsNull (object o, int index); | |
21 | |
22 bool SupportsTypedValues(int index); | |
23 | |
24 // Simple type getters. | |
25 // | |
26 [CLSCompliant(false)] | |
27 SByte GetSByte (object o, int index); | |
28 Int16 GetInt16 (object o, int index); | |
29 Int32 GetInt32 (object o, int index); | |
30 Int64 GetInt64 (object o, int index); | |
31 | |
32 Byte GetByte (object o, int index); | |
33 [CLSCompliant(false)] | |
34 UInt16 GetUInt16 (object o, int index); | |
35 [CLSCompliant(false)] | |
36 UInt32 GetUInt32 (object o, int index); | |
37 [CLSCompliant(false)] | |
38 UInt64 GetUInt64 (object o, int index); | |
39 | |
40 Boolean GetBoolean (object o, int index); | |
41 Char GetChar (object o, int index); | |
42 Single GetSingle (object o, int index); | |
43 Double GetDouble (object o, int index); | |
44 Decimal GetDecimal (object o, int index); | |
45 DateTime GetDateTime (object o, int index); | |
46 Guid GetGuid (object o, int index); | |
47 | |
48 #if FW2 | |
49 // Simple type getters. | |
50 // | |
51 [CLSCompliant(false)] | |
52 SByte? GetNullableSByte (object o, int index); | |
53 Int16? GetNullableInt16 (object o, int index); | |
54 Int32? GetNullableInt32 (object o, int index); | |
55 Int64? GetNullableInt64 (object o, int index); | |
56 | |
57 Byte? GetNullableByte (object o, int index); | |
58 [CLSCompliant(false)] | |
59 UInt16? GetNullableUInt16 (object o, int index); | |
60 [CLSCompliant(false)] | |
61 UInt32? GetNullableUInt32 (object o, int index); | |
62 [CLSCompliant(false)] | |
63 UInt64? GetNullableUInt64 (object o, int index); | |
64 | |
65 Boolean? GetNullableBoolean (object o, int index); | |
66 Char? GetNullableChar (object o, int index); | |
67 Single? GetNullableSingle (object o, int index); | |
68 Double? GetNullableDouble (object o, int index); | |
69 Decimal? GetNullableDecimal (object o, int index); | |
70 DateTime? GetNullableDateTime(object o, int index); | |
71 Guid? GetNullableGuid (object o, int index); | |
72 #endif | |
73 | |
74 // SQL type getters. | |
75 // | |
76 SqlByte GetSqlByte (object o, int index); | |
77 SqlInt16 GetSqlInt16 (object o, int index); | |
78 SqlInt32 GetSqlInt32 (object o, int index); | |
79 SqlInt64 GetSqlInt64 (object o, int index); | |
80 SqlSingle GetSqlSingle (object o, int index); | |
81 SqlBoolean GetSqlBoolean (object o, int index); | |
82 SqlDouble GetSqlDouble (object o, int index); | |
83 SqlDateTime GetSqlDateTime (object o, int index); | |
84 SqlDecimal GetSqlDecimal (object o, int index); | |
85 SqlMoney GetSqlMoney (object o, int index); | |
86 SqlGuid GetSqlGuid (object o, int index); | |
87 SqlString GetSqlString (object o, int index); | |
88 } | |
89 | |
90 [CLSCompliant(false)] | |
91 public interface IMapDataDestination | |
92 { | |
93 Type GetFieldType (int index); | |
94 int GetOrdinal (string name); | |
95 void SetValue (object o, int index, object value); | |
96 void SetValue (object o, string name, object value); | |
97 | |
98 void SetNull (object o, int index); | |
99 | |
100 bool SupportsTypedValues(int index); | |
101 | |
102 // Simple type setters. | |
103 // | |
104 [CLSCompliant(false)] | |
105 void SetSByte (object o, int index, SByte value); | |
106 void SetInt16 (object o, int index, Int16 value); | |
107 void SetInt32 (object o, int index, Int32 value); | |
108 void SetInt64 (object o, int index, Int64 value); | |
109 | |
110 void SetByte (object o, int index, Byte value); | |
111 [CLSCompliant(false)] | |
112 void SetUInt16 (object o, int index, UInt16 value); | |
113 [CLSCompliant(false)] | |
114 void SetUInt32 (object o, int index, UInt32 value); | |
115 [CLSCompliant(false)] | |
116 void SetUInt64 (object o, int index, UInt64 value); | |
117 | |
118 void SetBoolean (object o, int index, Boolean value); | |
119 void SetChar (object o, int index, Char value); | |
120 void SetSingle (object o, int index, Single value); | |
121 void SetDouble (object o, int index, Double value); | |
122 void SetDecimal (object o, int index, Decimal value); | |
123 void SetGuid (object o, int index, Guid value); | |
124 void SetDateTime (object o, int index, DateTime value); | |
125 | |
126 #if FW2 | |
127 // Simple type setters. | |
128 // | |
129 [CLSCompliant(false)] | |
130 void SetNullableSByte (object o, int index, SByte? value); | |
131 void SetNullableInt16 (object o, int index, Int16? value); | |
132 void SetNullableInt32 (object o, int index, Int32? value); | |
133 void SetNullableInt64 (object o, int index, Int64? value); | |
134 | |
135 void SetNullableByte (object o, int index, Byte? value); | |
136 [CLSCompliant(false)] | |
137 void SetNullableUInt16 (object o, int index, UInt16? value); | |
138 [CLSCompliant(false)] | |
139 void SetNullableUInt32 (object o, int index, UInt32? value); | |
140 [CLSCompliant(false)] | |
141 void SetNullableUInt64 (object o, int index, UInt64? value); | |
142 | |
143 void SetNullableBoolean (object o, int index, Boolean? value); | |
144 void SetNullableChar (object o, int index, Char? value); | |
145 void SetNullableSingle (object o, int index, Single? value); | |
146 void SetNullableDouble (object o, int index, Double? value); | |
147 void SetNullableDecimal (object o, int index, Decimal? value); | |
148 void SetNullableGuid (object o, int index, Guid? value); | |
149 void SetNullableDateTime (object o, int index, DateTime? value); | |
150 #endif | |
151 | |
152 // SQL type setters. | |
153 // | |
154 void SetSqlByte (object o, int index, SqlByte value); | |
155 void SetSqlInt16 (object o, int index, SqlInt16 value); | |
156 void SetSqlInt32 (object o, int index, SqlInt32 value); | |
157 void SetSqlInt64 (object o, int index, SqlInt64 value); | |
158 void SetSqlSingle (object o, int index, SqlSingle value); | |
159 void SetSqlBoolean (object o, int index, SqlBoolean value); | |
160 void SetSqlDouble (object o, int index, SqlDouble value); | |
161 void SetSqlDateTime(object o, int index, SqlDateTime value); | |
162 void SetSqlDecimal (object o, int index, SqlDecimal value); | |
163 void SetSqlMoney (object o, int index, SqlMoney value); | |
164 void SetSqlGuid (object o, int index, SqlGuid value); | |
165 void SetSqlString (object o, int index, SqlString value); | |
166 } | |
167 | |
168 [CLSCompliant(false)] | |
169 public interface IValueMapper | |
170 { | |
171 void Map( | |
172 IMapDataSource source, object sourceObject, int sourceIndex, | |
173 IMapDataDestination dest, object destObject, int destIndex); | |
174 } | |
175 | |
176 public static partial class ValueMapping | |
177 { | |
178 #region Init | |
179 | |
180 private static Table _mappers = new Table(); | |
181 | |
182 private static void AddSameType(Type type, IValueMapper mapper) | |
183 { | |
184 _mappers.Add(new KeyValue(type, type), mapper); | |
185 } | |
186 | |
187 #endregion | |
188 | |
189 #region Default Mapper | |
190 | |
191 class DefaultValueMapper : IValueMapper | |
192 { | |
193 public void Map( | |
194 IMapDataSource source, object sourceObject, int sourceIndex, | |
195 IMapDataDestination dest, object destObject, int destIndex) | |
196 { | |
197 dest.SetValue(destObject, destIndex, source.GetValue(sourceObject, sourceIndex)); | |
198 | |
199 //object o = source.GetValue(sourceObject, sourceIndex); | |
200 | |
201 //if (o == null) dest.SetNull (destObject, destIndex); | |
202 //else dest.SetValue(destObject, destIndex, o); | |
203 } | |
204 } | |
205 | |
206 private static IValueMapper _defaultMapper = new DefaultValueMapper(); | |
207 [CLSCompliant(false)] | |
208 public static IValueMapper DefaultMapper | |
209 { | |
210 get { return _defaultMapper; } | |
211 set { _defaultMapper = value; } | |
212 } | |
213 | |
214 #endregion | |
215 | |
216 #region GetMapper | |
217 | |
218 private static object _sync = new object(); | |
219 | |
220 [CLSCompliant(false)] | |
221 public static IValueMapper GetMapper(Type t1, Type t2) | |
222 { | |
223 lock (_sync) | |
224 { | |
225 if (t1 == null) t1 = typeof(object); | |
226 if (t2 == null) t2 = typeof(object); | |
227 | |
228 if (t1.IsEnum) t1 = Enum.GetUnderlyingType(t1); | |
229 if (t2.IsEnum) t2 = Enum.GetUnderlyingType(t2); | |
230 | |
231 KeyValue key = new KeyValue(t1, t2); | |
232 | |
233 IValueMapper t; | |
234 | |
235 #if FW2 | |
236 if (_mappers.TryGetValue(key, out t)) | |
237 return t; | |
238 | |
239 #else | |
240 t = (IValueMapper)_mappers[key]; | |
241 | |
242 if (t != null) | |
243 return t; | |
244 | |
245 t = _defaultMapper; | |
246 #endif | |
247 _mappers.Add(key, t); | |
248 | |
249 return t; | |
250 } | |
251 } | |
252 | |
253 #endregion | |
254 } | |
255 } |