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 } |
