comparison Source/Mapping/MapMemberInfo.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.Collections.Generic;
3 using System.Data;
4 using System.Diagnostics;
5
6 using BLToolkit.DataAccess;
7 using BLToolkit.Reflection;
8 using BLToolkit.Reflection.Extension;
9
10 namespace BLToolkit.Mapping
11 {
12 [DebuggerStepThrough]
13 public class MapMemberInfo
14 {
15 public MapMemberInfo()
16 {
17 DbType = DbType.Object;
18 }
19
20 public MemberAccessor MemberAccessor { get; set; }
21 public MemberAccessor ComplexMemberAccessor { get; set; }
22 public string Name { get; set; }
23 public string MemberName { get; set; }
24 public string Storage { get; set; }
25 public bool IsInheritanceDiscriminator { get; set; }
26 public bool Trimmable { get; set; }
27 public bool SqlIgnore { get; set; }
28 public bool Nullable { get; set; }
29 public object NullValue { get; set; }
30 public object DefaultValue { get; set; }
31 public Type Type { get; set; }
32 public int DbSize { get; set; }
33 public bool IsDbTypeSet { get; set; }
34 public bool IsDbSizeSet { get; set; }
35 public MappingSchema MappingSchema { get; set; }
36 public MemberExtension MemberExtension { get; set; }
37 public DbType DbType { get; set; }
38 public KeyGenerator KeyGenerator { get; set; }
39
40 private MapValue[] _mapValues;
41 public MapValue[] MapValues
42 {
43 get { return _mapValues; }
44 set
45 {
46 _mapValues = value;
47 if (value != null)
48 CacheMapValues();
49 else
50 {
51 _mapValueCache = new Dictionary<object, object>();
52 _origValueCache = new Dictionary<object, object>();
53 }
54 }
55 }
56
57 private Dictionary<object,object> _mapValueCache;
58
59 public bool TryGetOrigValue(object mapedValue, out object origValue)
60 {
61 return _mapValueCache.TryGetValue(mapedValue, out origValue);
62 }
63
64 private Dictionary<object,object> _origValueCache;
65
66 public bool TryGetMapValue(object origValue, out object mapValue)
67 {
68 return _origValueCache.TryGetValue(origValue, out mapValue);
69 }
70
71 private void CacheMapValues()
72 {
73 _mapValueCache = new Dictionary<object,object>();
74
75 foreach (var mv in MapValues)
76 foreach (var mapValue in mv.MapValues)
77 {
78 _mapValueCache[mapValue] = mv.OrigValue;
79
80 // this fixes spesial case for char
81 if (mapValue is char)
82 {
83 var str = new string(new[] { (char)mapValue });
84 _mapValueCache[str] = mv.OrigValue;
85 }
86 }
87
88 _origValueCache = new Dictionary<object, object>();
89
90 foreach (var mv in MapValues)
91 {
92 // previous behaviour - first wins!
93 // yah, no...
94 // any wins - attributes order is not specified
95 // and memberInfo.GetCustomAttributes(...) order and can differ
96 if (!_origValueCache.ContainsKey(mv.OrigValue))
97 _origValueCache[mv.OrigValue] = mv.MapValues[0];
98 }
99 }
100 }
101 }