Mercurial > pub > bltoolkit
comparison Extensions/JointureAddOn/Mapping/ValueMapper.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 BLToolkit.Emit; | |
4 | |
5 namespace BLToolkit.Mapping | |
6 { | |
7 public class ValueMapper : TableDescription, IMapper | |
8 { | |
9 private readonly Dictionary<string, List<string>> _columnVariations = new Dictionary<string, List<string>>(); | |
10 private readonly Dictionary<string, int> _columnOccurences = new Dictionary<string, int>(); | |
11 | |
12 public string ColumnAlias { get; set; } | |
13 public string ColumnName { get; set; } | |
14 | |
15 #region IMapper Members | |
16 | |
17 public int DataReaderIndex { get; set; } | |
18 public SetHandler Setter { get; set; } | |
19 public Type PropertyType { get; set; } | |
20 public string PropertyName { get; set; } | |
21 | |
22 #endregion | |
23 | |
24 public string GetColumnName(string columnName) | |
25 { | |
26 int occurenceCount; | |
27 if (_columnOccurences.ContainsKey(columnName)) | |
28 { | |
29 occurenceCount = _columnOccurences[columnName] + 1; | |
30 _columnOccurences[columnName] = occurenceCount; | |
31 } | |
32 else | |
33 { | |
34 _columnOccurences[columnName] = 1; | |
35 occurenceCount = 1; | |
36 } | |
37 | |
38 string res = columnName + (occurenceCount > 1 ? string.Format("_{0}", occurenceCount - 1) : ""); | |
39 | |
40 var variations = new List<string>(); | |
41 if (_columnVariations.ContainsKey(columnName)) | |
42 { | |
43 variations = _columnVariations[columnName]; | |
44 } | |
45 | |
46 variations.Add(res); | |
47 _columnVariations[columnName] = variations; | |
48 | |
49 return res; | |
50 } | |
51 | |
52 public bool SetDataReaderIndex(List<string> schemaColumns) | |
53 { | |
54 string colName = ColumnName; | |
55 int index = -1; | |
56 if (!schemaColumns.Contains(colName)) | |
57 { | |
58 bool found = false; | |
59 int order = 1; | |
60 foreach (string key in _columnVariations.Keys) | |
61 { | |
62 List<string> variations = _columnVariations[key]; | |
63 if (variations.Contains(colName)) | |
64 { | |
65 if (colName.Contains(key + "_")) | |
66 { | |
67 string orderString = colName.Replace(key + "_", ""); | |
68 order = int.Parse(orderString) + 1; | |
69 colName = key; | |
70 found = true; | |
71 break; | |
72 } | |
73 } | |
74 } | |
75 if (found) | |
76 { | |
77 int i = 0, occurenceCnt = 0; | |
78 foreach (string column in schemaColumns) | |
79 { | |
80 if (column == colName) | |
81 { | |
82 occurenceCnt++; | |
83 if (occurenceCnt == order) | |
84 { | |
85 index = i; | |
86 break; | |
87 } | |
88 } | |
89 i++; | |
90 } | |
91 } | |
92 else | |
93 { | |
94 // TODO Check this condition... | |
95 //if (!_ignoreMissingColumns) | |
96 //{ | |
97 // throw new Exception(string.Format("Couldnt find db column {0} in the query result", colName)); | |
98 //} | |
99 return true; | |
100 } | |
101 } | |
102 else | |
103 index = schemaColumns.IndexOf(colName); | |
104 | |
105 DataReaderIndex = index; | |
106 return false; | |
107 } | |
108 } | |
109 } |