Mercurial > pub > bltoolkit
comparison Source/Reflection/MetadataProvider/MetadataProviderBase.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 | |
4 using BLToolkit.Common; | |
5 using BLToolkit.DataAccess; | |
6 | |
7 namespace BLToolkit.Reflection.MetadataProvider | |
8 { | |
9 using Extension; | |
10 using Mapping; | |
11 | |
12 public delegate void OnCreateProvider(MetadataProviderBase parentProvider); | |
13 public delegate MetadataProviderBase CreateProvider(); | |
14 public delegate MemberMapper EnsureMapperHandler(string mapName, string origName); | |
15 | |
16 public abstract class MetadataProviderBase | |
17 { | |
18 #region Provider Support | |
19 | |
20 public virtual void AddProvider(MetadataProviderBase provider) | |
21 { | |
22 } | |
23 | |
24 public virtual void InsertProvider(int index, MetadataProviderBase provider) | |
25 { | |
26 } | |
27 | |
28 public virtual MetadataProviderBase[] GetProviders() | |
29 { | |
30 return new MetadataProviderBase[0]; | |
31 } | |
32 | |
33 #endregion | |
34 | |
35 #region GetFieldName | |
36 | |
37 public virtual string GetFieldName(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
38 { | |
39 isSet = false; | |
40 return member.Name; | |
41 } | |
42 | |
43 #endregion | |
44 | |
45 public virtual string GetSequenceName(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
46 { | |
47 isSet = false; | |
48 return null; | |
49 } | |
50 | |
51 #region GetFieldStorage | |
52 | |
53 public virtual string GetFieldStorage(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
54 { | |
55 isSet = false; | |
56 return null; | |
57 } | |
58 | |
59 #endregion | |
60 | |
61 #region GetInheritanceDiscriminator | |
62 | |
63 public virtual bool GetInheritanceDiscriminator(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
64 { | |
65 isSet = false; | |
66 return false; | |
67 } | |
68 | |
69 #endregion | |
70 | |
71 #region EnsureMapper | |
72 | |
73 public virtual void EnsureMapper(TypeAccessor typeAccessor, MappingSchema mappingSchema, EnsureMapperHandler handler) | |
74 { | |
75 } | |
76 | |
77 #endregion | |
78 | |
79 #region GetMapIgnore | |
80 | |
81 public virtual bool GetMapIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
82 { | |
83 isSet = false; | |
84 | |
85 return | |
86 TypeHelper.IsScalar(member.Type) == false;// || | |
87 //(member.MemberInfo is FieldInfo && ((FieldInfo)member.MemberInfo).IsLiteral); | |
88 } | |
89 | |
90 #endregion | |
91 | |
92 #region GetMapField | |
93 | |
94 public virtual MapFieldAttribute GetMapField(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
95 { | |
96 isSet = false; | |
97 return null; | |
98 } | |
99 | |
100 #endregion | |
101 | |
102 #region GetDbType | |
103 | |
104 [CLSCompliant(false)] | |
105 public virtual DbTypeAttribute GetDbType(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
106 { | |
107 isSet = false; | |
108 return null; | |
109 } | |
110 | |
111 #endregion | |
112 | |
113 #region GetPrimaryKey | |
114 | |
115 public virtual PrimaryKeyAttribute GetPrimaryKey(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
116 { | |
117 isSet = false; | |
118 return null; | |
119 } | |
120 | |
121 #endregion | |
122 | |
123 #region GetTrimmable | |
124 | |
125 public virtual bool GetTrimmable(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
126 { | |
127 isSet = member.Type != typeof(string); | |
128 return isSet? false: TrimmableAttribute.Default.IsTrimmable; | |
129 } | |
130 | |
131 #endregion | |
132 | |
133 #region GetMapValues | |
134 | |
135 public virtual MapValue[] GetMapValues(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
136 { | |
137 isSet = false; | |
138 return null; | |
139 } | |
140 | |
141 public virtual MapValue[] GetMapValues(TypeExtension typeExtension, Type type, out bool isSet) | |
142 { | |
143 isSet = false; | |
144 return null; | |
145 } | |
146 | |
147 #endregion | |
148 | |
149 #region GetDefaultValue | |
150 | |
151 public virtual object GetDefaultValue(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
152 { | |
153 isSet = false; | |
154 return null; | |
155 } | |
156 | |
157 public virtual object GetDefaultValue(MappingSchema mappingSchema, TypeExtension typeExtension, Type type, out bool isSet) | |
158 { | |
159 isSet = false; | |
160 return null; | |
161 } | |
162 | |
163 #endregion | |
164 | |
165 #region GetNullable | |
166 | |
167 public virtual bool GetNullable(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
168 { | |
169 isSet = false; | |
170 return | |
171 //member.Type.IsClass || | |
172 member.Type.IsGenericType && member.Type.GetGenericTypeDefinition() == typeof (Nullable<>) | |
173 /*|| | |
174 member.Type == typeof(System.Data.Linq.Binary) || | |
175 member.Type == typeof(byte[])*/; | |
176 } | |
177 | |
178 #endregion | |
179 | |
180 #region GetLazyInstance | |
181 | |
182 public virtual bool GetLazyInstance(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
183 { | |
184 isSet = false; | |
185 return false; | |
186 } | |
187 | |
188 #endregion | |
189 | |
190 #region GetNullValue | |
191 | |
192 public virtual object GetNullValue(MappingSchema mappingSchema, TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
193 { | |
194 isSet = false; | |
195 | |
196 if (member.Type.IsEnum) | |
197 return null; | |
198 | |
199 var value = mappingSchema.GetNullValue(member.Type); | |
200 | |
201 if (value is Type && (Type)value == typeof(DBNull)) | |
202 { | |
203 value = DBNull.Value; | |
204 | |
205 if (member.Type == typeof(string)) | |
206 value = null; | |
207 } | |
208 | |
209 return value; | |
210 } | |
211 | |
212 #endregion | |
213 | |
214 #region GetDbName | |
215 | |
216 public virtual string GetDatabaseName(Type type, ExtensionList extensions, out bool isSet) | |
217 { | |
218 isSet = false; | |
219 return null; | |
220 } | |
221 | |
222 #endregion | |
223 | |
224 #region GetOwnerName | |
225 | |
226 public virtual string GetOwnerName(Type type, ExtensionList extensions, out bool isSet) | |
227 { | |
228 isSet = false; | |
229 return null; | |
230 } | |
231 | |
232 #endregion | |
233 | |
234 #region GetTableName | |
235 | |
236 public virtual string GetTableName(Type type, ExtensionList extensions, out bool isSet) | |
237 { | |
238 isSet = false; | |
239 return | |
240 type.IsInterface && type.Name.StartsWith("I") | |
241 ? type.Name.Substring(1) | |
242 : type.Name; | |
243 } | |
244 | |
245 #endregion | |
246 | |
247 #region GetPrimaryKeyOrder | |
248 | |
249 public virtual int GetPrimaryKeyOrder(Type type, TypeExtension typeExt, MemberAccessor member, out bool isSet) | |
250 { | |
251 isSet = false; | |
252 return 0; | |
253 } | |
254 | |
255 #endregion | |
256 | |
257 #region GetNonUpdatableAttribute | |
258 | |
259 public virtual NonUpdatableAttribute GetNonUpdatableAttribute(Type type, TypeExtension typeExt, MemberAccessor member, out bool isSet) | |
260 { | |
261 isSet = false; | |
262 return null; | |
263 } | |
264 | |
265 #endregion | |
266 | |
267 #region GetSqlIgnore | |
268 | |
269 public virtual bool GetSqlIgnore(TypeExtension typeExtension, MemberAccessor member, out bool isSet) | |
270 { | |
271 isSet = false; | |
272 return false; | |
273 } | |
274 | |
275 #endregion | |
276 | |
277 #region GetRelations | |
278 | |
279 public virtual List<MapRelationBase> GetRelations(MappingSchema schema, ExtensionList typeExt, Type master, Type slave, out bool isSet) | |
280 { | |
281 isSet = false; | |
282 return new List<MapRelationBase>(); | |
283 } | |
284 | |
285 protected static List<string> GetPrimaryKeyFields(MappingSchema schema, TypeAccessor ta, TypeExtension tex) | |
286 { | |
287 var mdp = schema.MetadataProvider; | |
288 var keys = new List<string>(); | |
289 | |
290 foreach (MemberAccessor sma in ta) | |
291 { | |
292 bool isSetFlag; | |
293 | |
294 mdp.GetPrimaryKeyOrder(ta.Type, tex, sma, out isSetFlag); | |
295 | |
296 if (isSetFlag) | |
297 { | |
298 var name = mdp.GetFieldName(tex, sma, out isSetFlag); | |
299 keys.Add(name); | |
300 } | |
301 } | |
302 | |
303 return keys; | |
304 } | |
305 | |
306 #endregion | |
307 | |
308 #region GetAssociation | |
309 | |
310 public virtual Association GetAssociation(TypeExtension typeExtension, MemberAccessor member) | |
311 { | |
312 return null; | |
313 } | |
314 | |
315 #endregion | |
316 | |
317 #region GetInheritanceMapping | |
318 | |
319 public virtual InheritanceMappingAttribute[] GetInheritanceMapping(Type type, TypeExtension typeExtension) | |
320 { | |
321 return Array<InheritanceMappingAttribute>.Empty; | |
322 } | |
323 | |
324 #endregion | |
325 | |
326 #region Static Members | |
327 | |
328 public static event OnCreateProvider OnCreateProvider; | |
329 | |
330 private static CreateProvider _createProvider = CreateInternal; | |
331 public static CreateProvider CreateProvider | |
332 { | |
333 get { return _createProvider; } | |
334 set { _createProvider = value ?? new CreateProvider(CreateInternal); } | |
335 } | |
336 | |
337 private static MetadataProviderBase CreateInternal() | |
338 { | |
339 var list = new MetadataProviderList(); | |
340 | |
341 if (OnCreateProvider != null) | |
342 OnCreateProvider(list); | |
343 | |
344 return list; | |
345 } | |
346 | |
347 #endregion | |
348 } | |
349 } |