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