annotate UnitTests/Linq/Mapping.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.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.EditableObjects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using Convert = System.Convert;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 #pragma warning disable 0649
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public class Mapping : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public void Enum1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 var expected = from p in Person where new[] { Gender.Male }.Contains(p.Gender) select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 ForEachProvider(db => AreEqual(expected, from p in db.Person where new[] { Gender.Male }.Contains(p.Gender) select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public void Enum2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 from p in Person where p.Gender == Gender.Male select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 from p in db.Person where p.Gender == Gender.Male select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public void Enum21()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 var gender = Gender.Male;
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 Person where p.Gender == gender select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 from p in db.Person where p.Gender == gender 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 Enum3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 var fm = Gender.Female;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 var expected = from p in Person where p.Gender != fm select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 ForEachProvider(db => AreEqual(expected, from p in db.Person where p.Gender != fm select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 public void Enum4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 from p in Parent4 where p.Value1 == TypeValue.Value1 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 from p in db.Parent4 where p.Value1 == TypeValue.Value1 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 public void Enum5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 from p in Parent4 where p.Value1 == TypeValue.Value3 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 from p in db.Parent4 where p.Value1 == TypeValue.Value3 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public void Enum6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 from p in Parent4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 join c in Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 where p.Value1 == TypeValue.Value1 select p,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 from p in db.Parent4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 where p.Value1 == TypeValue.Value1 select p));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 public void Enum7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 var v1 = TypeValue.Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 ForEachProvider(db => db.Parent4.Update(p => p.Value1 == v1, p => new Parent4 { Value1 = v1 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 enum TestValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 Value1 = 1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 class TestParent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 public TestValue Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 public void Enum81()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 ForEachProvider(db => db.GetTable<TestParent>().Where(p => p.Value1 == TestValue.Value1).ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 public void Enum82()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 var testValue = TestValue.Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 ForEachProvider(db => db.GetTable<TestParent>().Where(p => p.Value1 == testValue).ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 public enum Gender9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 [MapValue('M')] Male,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 [MapValue('F')] Female,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 [MapValue('U')] Unknown,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 [MapValue('O')] Other,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 [TableName("Person")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 public class Person9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 public int PersonID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 public string FirstName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 public string LastName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 public string MiddleName;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 public Gender9 Gender;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 public void Enum9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 db.GetTable<Person9>().Where(p => p.PersonID == 1 && p.Gender == Gender9.Male).ToList());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 public void EditableObject()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 var e = (from p in db.GetTable<EditableParent>() where p.ParentID == 1 select p).First();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 Assert.AreEqual(1, e.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Assert.AreEqual(1, e.Value1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 [MapField("Value1", "Value.Value1")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 public class ParentObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 public Inner Value = new Inner();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 public class Inner
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 public int? Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 public void Inner1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 var e = db.GetTable<ParentObject>().First(p => p.ParentID == 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 Assert.AreEqual(1, e.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 Assert.AreEqual(1, e.Value.Value1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 public void Inner2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 var e = db.GetTable<ParentObject>().First(p => p.ParentID == 1 && p.Value.Value1 == 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 Assert.AreEqual(1, e.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 Assert.AreEqual(1, e.Value.Value1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 public class ChildObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 public int ChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 [Association(ThisKey="ParentID", OtherKey="ParentID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 public ParentObject Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 public void Inner3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 var e = db.GetTable<ChildObject>().First(c => c.Parent.Value.Value1 == 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 Assert.AreEqual(1, e.ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 public class ParentObject2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 class IntToDateMemberMapper : MemberMapper
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 public override void SetValue(object o, object value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 ((ParentObject2)o).Value1 = new DateTime(2010, 1, Convert.ToInt32(value));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 [MemberMapper(typeof(IntToDateMemberMapper))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 public DateTime Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 public void MemberMapperTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 from p in db.GetTable<ParentObject2>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 Assert.AreEqual(new DateTime(2010, 1, 1), q.First().Value1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 public void MemberMapperTest2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 from p in db.GetTable<ParentObject2>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 where p.ParentID == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 select p.Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 Assert.AreEqual(new DateTime(2010, 1, 1), q.First());
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 struct MyInt
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 public int MyValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 class MyParent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 public MyInt ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 public int? Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 class MyMappingSchema : MappingSchema
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 public override object ConvertChangeType(object value, Type conversionType, bool isNullable)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 if (conversionType == typeof(MyInt))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 return new MyInt { MyValue = Convert.ToInt32(value) };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 if (value is MyInt)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 value = ((MyInt)value).MyValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 return base.ConvertChangeType(value, conversionType, isNullable);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 public override object ConvertParameterValue(object value, Type systemType)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 return value is MyInt ? ((MyInt)value).MyValue : value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 static readonly MyMappingSchema _myMappingSchema = new MyMappingSchema();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 public void MyType1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 using (var db = new TestDbManager { MappingSchema = _myMappingSchema })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 var list = db.GetTable<MyParent>().ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 public void MyType2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 using (var db = new TestDbManager { MappingSchema = _myMappingSchema })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 var list = db.GetTable<MyParent>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300 .Select(t => new MyParent { ParentID = t.ParentID, Value1 = t.Value1 })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 .ToList();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 public void MyType3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 using (var db = new TestDbManager { MappingSchema = _myMappingSchema })
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 db.BeginTransaction();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 db.Insert(new MyParent { ParentID = new MyInt { MyValue = 1001 }, Value1 = 1001 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 db.Parent.Delete(p => p.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 class MyParent1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 public int? Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 [MapIgnore]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 public string Value2 { get { return "1"; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 public int GetValue() { return 2;}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 public void MapIgnore1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 Parent .Select(p => new { p.ParentID, Value2 = "1" }),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 db.GetTable<MyParent1>().Select(p => new { p.ParentID, p.Value2 })));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 public void MapIgnore2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 Parent .Select(p => new { p.ParentID, Length = 1 }),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 db.GetTable<MyParent1>().Select(p => new { p.ParentID, p.Value2.Length })));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 public void MapIgnore3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 ForEachProvider(db => AreEqual(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 Parent .Select(p => new { p.ParentID, Value = 2 }),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 db.GetTable<MyParent1>().Select(p => new { p.ParentID, Value = p.GetValue() })));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 public abstract class AbsParent : EditableObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 public abstract int ParentID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 public abstract int? Value1 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 public abstract class AbsChild : EditableObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 public abstract int ParentID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 public abstract int ChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 [Association(ThisKey = "ParentID", OtherKey = "ParentID", CanBeNull = false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 public AbsParent Parent;
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 MapAbstract()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 var q = from a in db.GetTable<AbsChild>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 select new { a.ChildID, a.Parent.Value1 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 var ql = q.ToList();
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 class Entity { public int Id { get; set; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 public interface IDocument { int Id { get; set; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 public class Document : Entity, IDocument { }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 public void TestMethod()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 IQueryable<IDocument> query = db.GetTable<Document>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 var idsQuery = query.Select(s => s.Id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 var str = idsQuery.ToString(); // Exception
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 Assert.IsNotNull(str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 public abstract class ParentX
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 [MapField("ParentID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 public abstract int ParentID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 [MapField("Value1")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 public abstract int? Value1 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 [TableName("Child")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 [MapField("ParentID", "Parent.ParentID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 public abstract class ChildX
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 [MapField("ChildID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 public abstract int ChildID { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 public abstract ParentX Parent { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 public void Test4([DataContexts] string contexts)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 using (var db = GetDataContext(contexts))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 db.Child. Delete(p => p.ParentID == 1001);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 db.Parent.Delete(p => p.ParentID == 1001);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 var child = TypeAccessor.CreateInstance<ChildX>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 var parent = TypeAccessor.CreateInstance<ParentX>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 parent.ParentID = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 parent.Value1 = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 db.Insert(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 child.ChildID = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 child.Parent = parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 db.Insert(child);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 db.Child. Delete(p => p.ParentID == 1001);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 db.Parent.Delete(p => p.ParentID == 1001);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442 }
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 }