annotate UnitTests/Linq/UpdateTest.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 using Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 using Data.Linq.Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 #region ReSharper disable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 // ReSharper disable ConvertToConstant.Local
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 namespace Update
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public class UpdateTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public void Update1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 var parent = new Parent1 { ParentID = 1001, Value1 = 1001 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 db.Parent.Delete(p => p.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 db.Insert(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 Assert.AreEqual(1, db.Parent.Count (p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 Assert.AreEqual(1, db.Parent.Update(p => p.ParentID == parent.ParentID, p => new Parent { ParentID = p.ParentID + 1 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 Assert.AreEqual(1, db.Parent.Count (p => p.ParentID == parent.ParentID + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 public void Update2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 var parent = new Parent1 { ParentID = 1001, Value1 = 1001 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 db.Parent.Delete(p => p.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 db.Insert(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 Assert.AreEqual(1, db.Parent.Count(p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 Assert.AreEqual(1, db.Parent.Where(p => p.ParentID == parent.ParentID).Update(p => new Parent { ParentID = p.ParentID + 1 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 Assert.AreEqual(1, db.Parent.Count(p => p.ParentID == parent.ParentID + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 public void Update3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 db.Child.Insert(() => new Child { ParentID = 1, ChildID = id});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 Assert.AreEqual(1, db.Child.Where(c => c.ChildID == id && c.Parent.Value1 == 1).Update(c => new Child { ChildID = c.ChildID + 1 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 public void Update4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 db.Child.Insert(() => new Child { ParentID = 1, ChildID = id});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 Assert.AreEqual(1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 .Where(c => c.ChildID == id && c.Parent.Value1 == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 .Set(c => c.ChildID, c => c.ChildID + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 .Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 public void Update5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 db.Child.Insert(() => new Child { ParentID = 1, ChildID = id});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 Assert.AreEqual(1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 .Where(c => c.ChildID == id && c.Parent.Value1 == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 .Set(c => c.ChildID, () => id + 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 .Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 public void Update6()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 db.Parent4.Delete(p => p.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 db.Insert(new Parent4 { ParentID = id, Value1 = TypeValue.Value1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 Assert.AreEqual(1, db.Parent4.Count(p => p.ParentID == id && p.Value1 == TypeValue.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 Assert.AreEqual(1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 db.Parent4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 .Where(p => p.ParentID == id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 .Set(p => p.Value1, () => TypeValue.Value2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 .Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 Assert.AreEqual(1, db.Parent4.Count(p => p.ParentID == id && p.Value1 == TypeValue.Value2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 db.Parent4.Delete(p => p.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 public void Update7()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 db.Parent4.Delete(p => p.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 db.Insert(new Parent4 { ParentID = id, Value1 = TypeValue.Value1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 Assert.AreEqual(1, db.Parent4.Count(p => p.ParentID == id && p.Value1 == TypeValue.Value1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 Assert.AreEqual(1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 db.Parent4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 .Where(p => p.ParentID == id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 .Set(p => p.Value1, TypeValue.Value2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 .Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 Assert.AreEqual(1, db.Parent4.Count(p => p.ParentID == id && p.Value1 == TypeValue.Value2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 Assert.AreEqual(1,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 db.Parent4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 .Where(p => p.ParentID == id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 .Set(p => p.Value1, TypeValue.Value3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 .Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 Assert.AreEqual(1, db.Parent4.Count(p => p.ParentID == id && p.Value1 == TypeValue.Value3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 db.Parent4.Delete(p => p.ParentID > 1000);
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
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 public void Update8()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 var parent = new Parent1 { ParentID = 1001, Value1 = 1001 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 db.Parent.Delete(p => p.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 db.Insert(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 parent.Value1++;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 db.Update(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 Assert.AreEqual(1002, db.Parent.Single(p => p.ParentID == parent.ParentID).Value1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 public void Update9()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 ForEachProvider(new[] { ProviderName.Informix, ProviderName.SqlCe, ProviderName.DB2, ProviderName.Firebird, "Oracle", "DevartOracle", ProviderName.PostgreSQL, ProviderName.MySql, ProviderName.SQLite, ProviderName.Access }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 db.Child.Insert(() => new Child { ParentID = 1, ChildID = id});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 join p in db.Parent on c.ParentID equals p.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 where c.ChildID == id && c.Parent.Value1 == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 select new { c, p };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 Assert.AreEqual(1, q.Update(db.Child, _ => new Child { ChildID = _.c.ChildID + 1, ParentID = _.p.ParentID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 public void Update10()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 ForEachProvider(new[] { ProviderName.Informix, ProviderName.SqlCe, ProviderName.DB2, ProviderName.Firebird, "Oracle", "DevartOracle", ProviderName.PostgreSQL, ProviderName.MySql, ProviderName.SQLite, ProviderName.Access }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 db.Child.Insert(() => new Child { ParentID = 1, ChildID = id});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 join c in db.Child on p.ParentID equals c.ParentID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 where c.ChildID == id && c.Parent.Value1 == 1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 select new { c, p };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282 Assert.AreEqual(1, q.Update(db.Child, _ => new Child { ChildID = _.c.ChildID + 1, ParentID = _.p.ParentID }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293 public void Update11()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 var q = db.GetTable<LinqDataTypes2>().Union(db.GetTable<LinqDataTypes2>());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 //db.GetTable<LinqDataTypes2>().Update(_ => q.Contains(_), _ => new LinqDataTypes2 { GuidValue = _.GuidValue });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 q.Update(_ => new LinqDataTypes2 { GuidValue = _.GuidValue });
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 UpdateAssociation1([DataContexts(ProviderName.Sybase, ProviderName.Informix)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 const int childId = 10000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 const int parentId = 20000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318 db.Parent.Insert(() => new Parent { ParentID = parentId, Value1 = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 db.Child. Insert(() => new Child { ChildID = childId, ParentID = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 var parents =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 from child in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323 where child.ChildID == childId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 select child.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 Assert.AreEqual(1, parents.Update(db.Parent, x => new Parent { Value1 = 5 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 }
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 UpdateAssociation2([DataContexts(ProviderName.Sybase, ProviderName.Informix)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 const int childId = 10000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 const int parentId = 20000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349 db.Parent.Insert(() => new Parent { ParentID = parentId, Value1 = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 db.Child. Insert(() => new Child { ChildID = childId, ParentID = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352 var parents =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 from child in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 where child.ChildID == childId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 select child.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 Assert.AreEqual(1, parents.Update(x => new Parent { Value1 = 5 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368 public void UpdateAssociation3([DataContexts(ProviderName.Sybase, ProviderName.Informix)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 const int childId = 10000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373 const int parentId = 20000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 db.Parent.Insert(() => new Parent { ParentID = parentId, Value1 = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 db.Child. Insert(() => new Child { ChildID = childId, ParentID = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383 var parents =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 from child in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385 where child.ChildID == childId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 select child.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388 Assert.AreEqual(1, parents.Update(x => x.ParentID > 0, x => new Parent { Value1 = 5 }));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 db.Parent.Delete(x => x.ParentID == parentId);
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
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 public void UpdateAssociation4([DataContexts(ProviderName.Sybase, ProviderName.Informix)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 const int childId = 10000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404 const int parentId = 20000;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 db.Parent.Insert(() => new Parent { ParentID = parentId, Value1 = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 db.Child. Insert(() => new Child { ChildID = childId, ParentID = parentId });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414 var parents =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 from child in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 where child.ChildID == childId
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 select child.Parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 Assert.AreEqual(1, parents.Set(x => x.Value1, 5).Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 db.Child. Delete(x => x.ChildID == childId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424 db.Parent.Delete(x => x.ParentID == parentId);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429 static readonly Func<TestDbManager,int,string,int> _updateQuery =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 CompiledQuery.Compile <TestDbManager,int,string,int>((ctx,key,value) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 ctx.Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 .Where(_ => _.ID == key)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 .Set(_ => _.FirstName, value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434 .Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 public void CompiledUpdate()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 using (var ctx = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 _updateQuery(ctx, 12345, "54321");
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 [TableName("LinqDataTypes")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 class Table1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 public int ID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 public bool BoolValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 [Association(ThisKey = "ID", OtherKey = "ParentID", CanBeNull = false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452 public List<Table2> Tables2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 [TableName("Parent")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 class Table2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 public int ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 public bool Value1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 [Association(ThisKey = "ParentID", OtherKey = "ID", CanBeNull = false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 public Table1 Table1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 public void UpdateAssociation5([DataContexts(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 ProviderName.Access, ProviderName.DB2, ProviderName.Firebird, ProviderName.Informix, "Oracle", ProviderName.PostgreSQL, ProviderName.SqlCe, ProviderName.SQLite,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 ExcludeLinqService=true)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 using (var db = new DbManager(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 var ids = new[] { 10000, 20000 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 db.GetTable<Table2>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 .Where (x => ids.Contains(x.ParentID))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 .Select(x => x.Table1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 .Distinct()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478 .Set(y => y.BoolValue, y => y.Tables2.All(x => x.Value1))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 .Update();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 var idx = db.LastQuery.IndexOf("INNER JOIN");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483 Assert.That(idx, Is.Not.EqualTo(-1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 idx = db.LastQuery.IndexOf("INNER JOIN", idx + 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 Assert.That(idx, Is.EqualTo(-1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 public void AsUpdatableTest([DataContexts(ProviderName.Informix)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498 var id = 1001;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 db.Child.Insert(() => new Child { ParentID = 1, ChildID = id});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505 var q = db.Child.Where(c => c.ChildID == id && c.Parent.Value1 == 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 var uq = q.AsUpdatable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508 uq = uq.Set(c => c.ChildID, c => c.ChildID + 1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 Assert.AreEqual(1, uq.Update());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id + 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515 db.Child.Delete(c => c.ChildID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 [TableName("GrandChild")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 class Table3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 [PrimaryKey(1)] public int? ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 [PrimaryKey(2)] public int? ChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 public int? GrandChildID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 public void UpdateNullablePrimaryKey([DataContexts] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 db.Update(new Table3 { ParentID = 10000, ChildID = null, GrandChildID = 1000 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 if (db is DbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 Assert.IsTrue(((DbManager)db).LastQuery.Contains("IS NULL"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 db.Update(new Table3 { ParentID = 10000, ChildID = 111, GrandChildID = 1000 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 if (db is DbManager)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 Assert.IsFalse(((DbManager)db).LastQuery.Contains("IS NULL"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 }