annotate UnitTests/Linq/Inheritance.cs @ 5:f7d63a092920

Исправлено условие Where в тех случаях, когда репозитарий не является генериком
author cin
date Tue, 10 Mar 2015 16:02:11 +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 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data.Sql.SqlProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class Inheritance : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public void Test1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 ForEachProvider(db => AreEqual(ParentInheritance, db.ParentInheritance));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public void Test2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 ForEachProvider(db => AreEqual(ParentInheritance, db.ParentInheritance.Select(p => p)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public void Test3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 from p in ParentInheritance where p is ParentInheritance1 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 from p in db.ParentInheritance where p is ParentInheritance1 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public void Test4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 from p in ParentInheritance where !(p is ParentInheritanceNull) select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 from p in db.ParentInheritance where !(p is ParentInheritanceNull) select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 public void Test5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 from p in ParentInheritance where p is ParentInheritanceValue select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 from p in db.ParentInheritance where p is ParentInheritanceValue select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public void Test6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 var q = from p in db.ParentInheritance2 where p is ParentInheritance12 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 q.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public void Test7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 #pragma warning disable 183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 var expected = from p in ParentInheritance where p is ParentInheritanceBase select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 ForEachProvider(db => AreEqual(expected, from p in db.ParentInheritance where p is ParentInheritanceBase select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 #pragma warning restore 183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public void Test8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 ParentInheritance.OfType<ParentInheritance1>(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 db.ParentInheritance.OfType<ParentInheritance1>()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 public void Test9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 ParentInheritance
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 .Where(p => p.ParentID == 1 || p.ParentID == 2 || p.ParentID == 4)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 .OfType<ParentInheritanceNull>(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 db.ParentInheritance
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 .Where(p => p.ParentID == 1 || p.ParentID == 2 || p.ParentID == 4)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 .OfType<ParentInheritanceNull>()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 public void Test10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 var expected = ParentInheritance.OfType<ParentInheritanceValue>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 ForEachProvider(db => AreEqual(expected, db.ParentInheritance.OfType<ParentInheritanceValue>()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 public void Test11()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 var q = from p in db.ParentInheritance3 where p is ParentInheritance13 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 q.ToList();
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 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 public void Test12()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 from p in ParentInheritance1 where p.ParentID == 1 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 from p in db.ParentInheritance1 where p.ParentID == 1 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public void Test13()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 from p in ParentInheritance4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 join c in Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 from p in db.ParentInheritance4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 public void TypeCastAsTest1([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 DiscontinuedProduct.ToList()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 .Select(p => p as Northwind.Product)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 .Select(p => p == null ? "NULL" : p.ProductName),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 db.DiscontinuedProduct
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 .Select(p => p as Northwind.Product)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 .Select(p => p == null ? "NULL" : p.ProductName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 public void TypeCastAsTest11([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 DiscontinuedProduct.ToList()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 .Select(p => new { p = p as Northwind.Product })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 .Select(p => p.p == null ? "NULL" : p.p.ProductName),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 db.DiscontinuedProduct
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 .Select(p => new { p = p as Northwind.Product })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 .Select(p => p.p == null ? "NULL" : p.p.ProductName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 public void TypeCastAsTest2([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 Product.ToList()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 .Select(p => p as Northwind.DiscontinuedProduct)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 .Select(p => p == null ? "NULL" : p.ProductName),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 db.Product
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 .Select(p => p as Northwind.DiscontinuedProduct)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 .Select(p => p == null ? "NULL" : p.ProductName));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 public void FirstOrDefault([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 Assert.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 DiscontinuedProduct.FirstOrDefault().ProductID,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 db.DiscontinuedProduct.FirstOrDefault().ProductID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 public void Cast1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 ParentInheritance.OfType<ParentInheritance1>().Cast<ParentInheritanceBase>(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 db.ParentInheritance.OfType<ParentInheritance1>().Cast<ParentInheritanceBase>()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 class ParentEx : Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 [MapIgnore]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 protected bool Field1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 public static void Test(Inheritance inheritance)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 inheritance.ForEachProvider(db => inheritance.AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 inheritance.Parent.Select(p => new ParentEx { Field1 = true, ParentID = p.ParentID, Value1 = p.Value1 }).Cast<Parent>(),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 db.Parent.Select(p => new ParentEx { Field1 = true, ParentID = p.ParentID, Value1 = p.Value1 }).Cast<Parent>()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 public void Cast2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 ParentEx.Test(this);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 [TableName("Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 class PersonEx : Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 public void SimplTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 Assert.AreEqual(1, db.GetTable<PersonEx>().Where(_ => _.FirstName == "John").Select(_ => _.ID).Single());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 [InheritanceMapping(Code = 1, Type = typeof(Parent222))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 public class Parent111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 [MapField(IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 [MapField("Value1", "Value.ID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 public class Parent222 : Parent111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 [MapIgnore]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 public Value111 Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 public class Value111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 public void InheritanceMappingIssueTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 var q1 = db.GetTable<Parent222>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 var q = q1.Where(_ => _.Value.ID == 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 var sql = ((ExpressionQuery<Parent222>)q).SqlText;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 Assert.IsNotEmpty(sql);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public void ReferenceNavigation([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 var result =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 from od in db.OrderDetail
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 where od.Product.Category.CategoryName == "Seafood"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 select new { od.Order, od.Product };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 var list = result.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 Assert.AreEqual(330, list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 foreach (var item in list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 Assert.IsNotNull(item);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 Assert.IsNotNull(item.Order);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 Assert.IsNotNull(item.Product);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 Assert.IsTrue(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 item.Product.Discontinued && item.Product is Northwind.DiscontinuedProduct ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 !item.Product.Discontinued && item.Product is Northwind.ActiveProduct);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 public void TypeCastIsChildConditional1([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 var result = db.Product. Select(x => x is Northwind.DiscontinuedProduct ? x : null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 var expected = db.Product.ToList().Select(x => x is Northwind.DiscontinuedProduct ? x : null);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 var list = result.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 Assert.Greater(list.Count, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 Assert.AreEqual(expected.Count(), list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 Assert.IsTrue(list.Except(expected).Count() == 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 Assert.IsTrue(list.Contains(null));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 public void TypeCastIsChildConditional2([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 var result = db.Product. Select(x => x is Northwind.DiscontinuedProduct);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 var expected = db.Product.ToList().Select(x => x is Northwind.DiscontinuedProduct);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 var list = result.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 Assert.Greater(list.Count, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 Assert.AreEqual(expected.Count(), list.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 Assert.IsTrue(list.Except(expected).Count() == 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 public void TypeCastIsChild([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 var result = db.Product.Where(x => x is Northwind.DiscontinuedProduct).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 var expected = Product.Where(x => x is Northwind.DiscontinuedProduct).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 Assert.Greater(result.Count, 0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 Assert.AreEqual(result.Count, expected.Count);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 #region Models for Test14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 interface IChildTest14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 int ChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 class ChildTest14 : IChildTest14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 [PrimaryKey]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335 public int ChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 T FindById<T>(IQueryable<T> queryable, int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 where T : IChildTest14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 return queryable.Where(x => x.ChildID == id).FirstOrDefault();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 public void Test14()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 var q = db.GetTable<ChildTest14>().Select(c => new ChildTest14() { ChildID = c.ChildID });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 FindById(q, 10);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 public void Test15([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 var result = db.DiscontinuedProduct.Select(p => p).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 var expected = DiscontinuedProduct.Select(p => p).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 Assert.That(result.Count, Is.Not.EqualTo(0).And.EqualTo(expected.Count));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 public void Test16([IncludeDataContexts("Northwind")] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 using (var db = new NorthwindDB())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 var result = db.DiscontinuedProduct.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 var expected = DiscontinuedProduct.ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 Assert.That(result.Count, Is.Not.EqualTo(0).And.EqualTo(expected.Count));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 public enum TypeCodeEnum
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 Base,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 A,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 A1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 A2,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 [TableName("LinqDataTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 public abstract class InheritanceBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 public Guid GuidValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 [MapField("ID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 public virtual TypeCodeEnum TypeCode
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 get { return TypeCodeEnum.Base; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 [InheritanceMapping(Code = TypeCodeEnum.A1, Type = typeof(InheritanceA1), IsDefault = false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 [InheritanceMapping(Code = TypeCodeEnum.A2, Type = typeof(InheritanceA2), IsDefault = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 public abstract class InheritanceA : InheritanceBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 [Association(CanBeNull = true, ThisKey = "GuidValue", OtherKey = "GuidValue")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 public List<InheritanceB> Bs { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 [MapField("ID", IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 public override TypeCodeEnum TypeCode
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 get { return TypeCodeEnum.A; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 class InheritanceA1 : InheritanceA
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 [MapField("ID", IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 public override TypeCodeEnum TypeCode
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 get { return TypeCodeEnum.A1; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 class InheritanceA2 : InheritanceA
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 [MapField("ID", IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 public override TypeCodeEnum TypeCode
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 get { return TypeCodeEnum.A2; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 public class InheritanceB : InheritanceBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 public void GuidTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 var list = db.GetTable<InheritanceA>().Where(a => a.Bs.Any()).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 public void QuerySyntaxSimpleTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 // db.GetTable<Parent111>().OfType<Parent222>().ToList(); - it's work!!!
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 (from p in db.GetTable<Parent111>().OfType<Parent222>() select p).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 [TableName("Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 [InheritanceMapping(Code = 1, Type = typeof(Test17John))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 [InheritanceMapping(Code = 2, Type = typeof(Test17Tester))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 public class Test17Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 [MapField(IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 public int PersonID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 public class Test17John : Test17Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 public string FirstName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 public class Test17Tester : Test17Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 public string LastName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 public void Test17()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 ForEachProvider(context =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 if (context is TestDbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 var db = (TestDbManager)context;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 db.GetTable<Test17Person>().OfType<Test17John>().ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 Assert.False(db.LastQuery.ToLowerInvariant().Contains("lastname"), "Why select LastName field??");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 [TableName("Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 [InheritanceMapping(Code = Gender.Male, Type = typeof(Test18Male))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 [InheritanceMapping(Code = Gender.Female, Type = typeof(Test18Female))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 public class Test18Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 [PrimaryKey, NonUpdatable(IsIdentity = true, OnInsert = true, OnUpdate = true), SequenceName("PERSONID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 public int PersonID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 [MapField(IsInheritanceDiscriminator = true)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 public Gender Gender { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 public class Test18Male : Test18Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 public string FirstName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 public class Test18Female : Test18Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 public string FirstName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 public string LastName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 public void Test18()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 var ids = Enumerable.Range(0, 10).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 from p1 in db.GetTable<Test18Person>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 where ids.Contains(p1.PersonID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 join p2 in db.GetTable<Test18Person>() on p1.PersonID equals p2.PersonID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 select p1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 var list = q.Distinct().OfType<Test18Female>().ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 public void Test19()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 var ids = Enumerable.Range(0, 10).ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 from p1 in db.GetTable<Test18Person>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 where ids.Contains(p1.PersonID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 join p2 in db.GetTable<Test18Person>() on p1.PersonID equals p2.PersonID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537 select p1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 IQueryable iq = q.Distinct();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 var list = iq.OfType<Test18Female>().ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 }