annotate Extensions/JointureAddOn/Mapping/CollectionFullObjectMapper.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 BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Emit;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 namespace BLToolkit.Mapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public class CollectionFullObjectMapper : TableDescription, IObjectMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 private readonly DbManager _db;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 private readonly FactoryType _factoryType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public CollectionFullObjectMapper(DbManager db, FactoryType factoryType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 _db = db;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 _factoryType = factoryType;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 PropertiesMapping = new List<IMapper>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 PrimaryKeyValueGetters = new List<GetHandler>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 PrimaryKeyNames = new List<string>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public Type PropertyCollectionType { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 #region IMapper Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public int DataReaderIndex { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public SetHandler Setter { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public Type PropertyType { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public string PropertyName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 #region IObjectMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public bool IsLazy { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public bool ContainsLazyChild { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 public GetHandler Getter { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 public List<GetHandler> PrimaryKeyValueGetters { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public Association Association { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public List<string> PrimaryKeyNames { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 #region ILazyMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public GetHandler ParentKeyGetter { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public object CreateInstance()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 object result = ContainsLazyChild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 ? (_factoryType == FactoryType.LazyLoading
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 ? TypeFactory.LazyLoading.Create(PropertyType, this, LoadLazy)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 : TypeFactory.LazyLoadingWithDataBinding.Create(PropertyType, this, LoadLazy))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 : FunctionFactory.Remote.CreateInstance(PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 return result;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 private object LoadLazy(IMapper mapper, object proxy, Type parentType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 var lazyMapper = (ILazyMapper) mapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 object key = lazyMapper.ParentKeyGetter(proxy);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 var fullSqlQuery = new FullSqlQuery(_db, true);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 object parentLoadFull = fullSqlQuery.SelectByKey(parentType, key);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 if (parentLoadFull == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 object value = Activator.CreateInstance(mapper is CollectionFullObjectMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 ? (mapper as CollectionFullObjectMapper).PropertyCollectionType
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 : mapper.PropertyType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 var objectMapper = (IObjectMapper) mapper;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 return objectMapper.Getter(parentLoadFull);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 #region IPropertiesMapping Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 public List<IMapper> PropertiesMapping { get; private set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 public IPropertiesMapping ParentMapping { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }