annotate Source/Mapping/MapMemberInfo.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Diagnostics;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Reflection.Extension;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace BLToolkit.Mapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [DebuggerStepThrough]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class MapMemberInfo
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public MapMemberInfo()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 DbType = DbType.Object;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public MemberAccessor MemberAccessor { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public MemberAccessor ComplexMemberAccessor { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public string Name { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public string MemberName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public string Storage { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 public bool IsInheritanceDiscriminator { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public bool Trimmable { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public bool SqlIgnore { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public bool Nullable { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public object NullValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public object DefaultValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public Type Type { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public int DbSize { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 public bool IsDbTypeSet { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public bool IsDbSizeSet { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 public MappingSchema MappingSchema { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 public MemberExtension MemberExtension { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public DbType DbType { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public KeyGenerator KeyGenerator { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 private MapValue[] _mapValues;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 public MapValue[] MapValues
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 get { return _mapValues; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 _mapValues = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 if (value != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 CacheMapValues();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 _mapValueCache = new Dictionary<object, object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 _origValueCache = new Dictionary<object, object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 private Dictionary<object,object> _mapValueCache;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 public bool TryGetOrigValue(object mapedValue, out object origValue)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 return _mapValueCache.TryGetValue(mapedValue, out origValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 private Dictionary<object,object> _origValueCache;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public bool TryGetMapValue(object origValue, out object mapValue)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 return _origValueCache.TryGetValue(origValue, out mapValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 private void CacheMapValues()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 _mapValueCache = new Dictionary<object,object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 foreach (var mv in MapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 foreach (var mapValue in mv.MapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 _mapValueCache[mapValue] = mv.OrigValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 // this fixes spesial case for char
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 if (mapValue is char)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 var str = new string(new[] { (char)mapValue });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 _mapValueCache[str] = mv.OrigValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 _origValueCache = new Dictionary<object, object>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 foreach (var mv in MapValues)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 // previous behaviour - first wins!
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 // yah, no...
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 // any wins - attributes order is not specified
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 // and memberInfo.GetCustomAttributes(...) order and can differ
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 if (!_origValueCache.ContainsKey(mv.OrigValue))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 _origValueCache[mv.OrigValue] = mv.MapValues[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 }