annotate HowTo/Data/ComplexMapping.cs @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +0300
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
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Reflection.Extension;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 namespace HowTo.Data
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public class ComplexMapping
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 const string TestQuery = @"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 -- Parent Data
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 SELECT 1 as ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 UNION SELECT 2 as ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 -- Child Data
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 SELECT 4 ChildID, 1 as ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 UNION SELECT 5 ChildID, 2 as ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 UNION SELECT 6 ChildID, 2 as ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 UNION SELECT 7 ChildID, 1 as ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 -- Grandchild Data
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 SELECT 1 GrandchildID, 4 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 UNION SELECT 2 GrandchildID, 4 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 UNION SELECT 3 GrandchildID, 5 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 UNION SELECT 4 GrandchildID, 5 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 UNION SELECT 5 GrandchildID, 6 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 UNION SELECT 6 GrandchildID, 6 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 UNION SELECT 7 GrandchildID, 7 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 UNION SELECT 8 GrandchildID, 7 as ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 ";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public class Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 [MapField("ParentID"), /*[a]*/PrimaryKey/*[/a]*/]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 /*[a]*/[Relation(typeof(Child))]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public List<Child> Children = new List<Child>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 [MapField("ParentID", "Parent.ID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 public class Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 [MapField("ChildID"), /*[a]*/PrimaryKey/*[/a]*/]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 /*[a]*/[Relation]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public Parent Parent = new Parent();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 /*[a]*/[Relation(typeof(Grandchild))]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 public List<Grandchild> Grandchildren = new List<Grandchild>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 [MapField("ChildID", "Child.ID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 public class Grandchild
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 [MapField("GrandchildID"), /*[a]*/PrimaryKey/*[/a]*/]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 /*[a]*/[Relation]/*[/a]*/
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public Child Child = new Child();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 List<Parent> parents = new List<Parent>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 /*[a]*/MapResultSet/*[/a]*/[] sets = new MapResultSet[3];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 sets[0] = new MapResultSet(typeof(Parent), parents);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 sets[1] = new MapResultSet(typeof(Child));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 sets[2] = new MapResultSet(typeof(Grandchild));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 sets[0].AddRelation(sets[1], "ParentID", "ParentID", "Children");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 sets[1].AddRelation(sets[0], "ParentID", "ParentID", "Parent");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 sets[1].AddRelation(sets[2], "ChildID", "ChildID", "Grandchildren");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 sets[2].AddRelation(sets[1], "ChildID", "ChildID", "Child");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 .SetCommand (TestQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 ./*[a]*/ExecuteResultSet/*[/a]*/(sets);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 Assert.IsNotEmpty(parents);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 foreach (Parent parent in parents)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 Assert.IsNotNull(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 Assert.IsNotEmpty(parent.Children);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 foreach (Child child in parent.Children)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 Assert.AreEqual(parent, child.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 Assert.IsNotEmpty(child.Grandchildren);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 foreach (Grandchild grandchild in child.Grandchildren)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 Assert.AreEqual(child, grandchild.Child);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 Assert.AreEqual(parent, grandchild.Child.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 public void Test2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 List<Parent> parents = new List<Parent>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 /*[a]*/MapResultSet/*[/a]*/[] sets = new MapResultSet[3];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 sets[0] = new MapResultSet(typeof(Parent), parents);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 sets[1] = new MapResultSet(typeof(Child));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 sets[2] = new MapResultSet(typeof(Grandchild));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 .SetCommand(TestQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 ./*[a]*/ExecuteResultSet/*[/a]*/(sets);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 Assert.IsNotEmpty(parents);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 foreach (Parent parent in parents)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 Assert.IsNotNull(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 Assert.IsNotEmpty(parent.Children);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 foreach (Child child in parent.Children)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 Assert.AreEqual(parent, child.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 Assert.IsNotEmpty(child.Grandchildren);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 foreach (Grandchild grandchild in child.Grandchildren)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 Assert.AreEqual(child, grandchild.Child);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 Assert.AreEqual(parent, grandchild.Child.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 public class ParentEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 public List<ChildEx> Children = new List<ChildEx>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 public class ChildEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 public ParentEx Parent = new ParentEx();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 public List<GrandchildEx> Grandchildren = new List<GrandchildEx>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 public class GrandchildEx
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 public ChildEx Child = new ChildEx();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 static readonly MappingSchema _mappingSchema = new MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 Extensions = TypeExtension.GetExtensions("RelationExtension.xml")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 public void Test3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 var parents = new List<ParentEx>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 var sets = new /*[a]*/MapResultSet/*[/a]*/[3];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 sets[0] = new MapResultSet(typeof(ParentEx), parents);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 sets[1] = new MapResultSet(typeof(ChildEx));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 sets[2] = new MapResultSet(typeof(GrandchildEx));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 using (var db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 db.MappingSchema = _mappingSchema;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 .SetCommand(TestQuery)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 ./*[a]*/ExecuteResultSet/*[/a]*/(sets);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 Assert.IsNotEmpty(parents);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 foreach (ParentEx parent in parents)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 Assert.IsNotNull(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 Assert.IsNotEmpty(parent.Children);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 foreach (ChildEx child in parent.Children)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 Assert.AreEqual(parent, child.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 Assert.IsNotEmpty(child.Grandchildren);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 foreach (GrandchildEx grandchild in child.Grandchildren)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 Assert.AreEqual(child, grandchild.Child);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 Assert.AreEqual(parent, grandchild.Child.Parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 }