annotate UnitTests/Linq/DeleteTest.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.Data.DataProvider;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 using Data.Linq.Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 #region ReSharper disable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 // ReSharper disable ConvertToConstant.Local
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 // ReSharper disable CheckNamespace
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 namespace Update
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public class DeleteTest : 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 Delete1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 var parent = new Parent1 { ParentID = 1001, Value1 = 1001 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 db.Delete(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 db.Insert(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 Assert.AreEqual(1, db.Parent.Count (p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 Assert.AreEqual(1, db.Parent.Delete(p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 Assert.AreEqual(0, db.Parent.Count (p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 db.Delete(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 public void Delete2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 var parent = new Parent1 { ParentID = 1001, Value1 = 1001 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 db.Delete(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 db.Insert(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 Assert.AreEqual(1, db.Parent.Count(p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 Assert.AreEqual(1, db.Parent.Where(p => p.ParentID == parent.ParentID).Delete());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 Assert.AreEqual(0, db.Parent.Count(p => p.ParentID == parent.ParentID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 db.Delete(parent);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 }
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 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public void Delete3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 db.Child.Delete(c => new[] { 1001, 1002 }.Contains(c.ChildID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 db.Child.Insert(() => new Child { ParentID = 1, ChildID = 1001 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 db.Child.Insert(() => new Child { ParentID = 1, ChildID = 1002 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 Assert.AreEqual(3, db.Child.Count(c => c.ParentID == 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 Assert.AreEqual(2, db.Child.Where(c => c.Parent.ParentID == 1 && new[] { 1001, 1002 }.Contains(c.ChildID)).Delete());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 Assert.AreEqual(1, db.Child.Count(c => c.ParentID == 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 db.Child.Delete(c => new[] { 1001, 1002 }.Contains(c.ChildID));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 }
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 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 public void Delete4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 ForEachProvider(new[] { ProviderName.Informix }, db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 db.GrandChild1.Delete(gc => new[] { 1001, 1002 }.Contains(gc.GrandChildID.Value));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 db.GrandChild.Insert(() => new GrandChild { ParentID = 1, ChildID = 1, GrandChildID = 1001 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 db.GrandChild.Insert(() => new GrandChild { ParentID = 1, ChildID = 2, GrandChildID = 1002 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 Assert.AreEqual(3, db.GrandChild1.Count(gc => gc.ParentID == 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 Assert.AreEqual(2, db.GrandChild1.Where(gc => gc.Parent.ParentID == 1 && new[] { 1001, 1002 }.Contains(gc.GrandChildID.Value)).Delete());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 Assert.AreEqual(1, db.GrandChild1.Count(gc => gc.ParentID == 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 db.GrandChild1.Delete(gc => new[] { 1001, 1002 }.Contains(gc.GrandChildID.Value));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 public void Delete5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 var values = new[] { 1001, 1002 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 db.Parent.Delete(_ => _.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 db.Parent.Insert(() => new Parent { ParentID = values[0], Value1 = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 db.Parent.Insert(() => new Parent { ParentID = values[1], Value1 = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 Assert.AreEqual(2, db.Parent.Count(_ => _.ParentID > 1000));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 Assert.AreEqual(2, db.Parent.Delete(_ => values.Contains(_.ParentID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 Assert.AreEqual(0, db.Parent.Count(_ => _.ParentID > 1000));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 db.Parent.Delete(_ => _.ParentID > 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 public void AlterDelete([DataContexts(ProviderName.Informix, ExcludeLinqService=true)] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 join ch in db.Child on p.ParentID equals ch.ParentID into lj1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 from ch in lj1.DefaultIfEmpty()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 where ch != null && ch.ParentID == -1 || ch == null && p.ParentID == -1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 q.Delete();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 var sql = ((TestDbManager)db).LastQuery;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 if (sql.Contains("EXISTS"))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 Assert.That(sql.IndexOf("(("), Is.GreaterThan(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 public void DeleteMany1([DataContexts(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 ProviderName.Access, ProviderName.DB2, ProviderName.Informix, "Oracle",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 ProviderName.PostgreSQL, ProviderName.SqlCe, ProviderName.SQLite, ProviderName.Firebird
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 )] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 db.Parent.Insert(() => new Parent { ParentID = 1001 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 db.Child. Insert(() => new Child { ParentID = 1001, ChildID = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 db.Child. Insert(() => new Child { ParentID = 1001, ChildID = 2 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 where p.ParentID >= 1000
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 var n = q.SelectMany(p => p.Children).Delete();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 Assert.That(n, Is.GreaterThanOrEqualTo(2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 db.Child. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 db.Parent.Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 public void DeleteMany2([DataContexts(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 ProviderName.Access, ProviderName.DB2, ProviderName.Informix, "Oracle",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 ProviderName.PostgreSQL, ProviderName.SqlCe, ProviderName.SQLite, ProviderName.Firebird
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 )] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 db.Parent. Insert(() => new Parent { ParentID = 1001 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 db.Child. Insert(() => new Child { ParentID = 1001, ChildID = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 1, GrandChildID = 1});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 1, GrandChildID = 2});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 1, GrandChildID = 3});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 db.Child. Insert(() => new Child { ParentID = 1001, ChildID = 2 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 2, GrandChildID = 1});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 2, GrandChildID = 2});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 2, GrandChildID = 3});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 where p.ParentID >= 1000
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 var n1 = q.SelectMany(p => p.Children.SelectMany(c => c.GrandChildren)).Delete();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 var n2 = q.SelectMany(p => p.Children). Delete();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 Assert.That(n1, Is.EqualTo(6));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 Assert.That(n2, Is.EqualTo(2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 db.GrandChild.Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 db.Child. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 db.Parent. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 }
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 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 public void DeleteMany3([DataContexts(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 ProviderName.Access, ProviderName.DB2, ProviderName.Informix, "Oracle",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 ProviderName.PostgreSQL, ProviderName.SqlCe, ProviderName.SQLite, ProviderName.Firebird
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 )] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 var ids = new[] { 1001 };
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 db.GrandChild.Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 db.Child. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 db.Parent. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 db.Parent. Insert(() => new Parent { ParentID = 1001 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 db.Child. Insert(() => new Child { ParentID = 1001, ChildID = 1 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 1, GrandChildID = 1});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 db.GrandChild.Insert(() => new GrandChild { ParentID = 1001, ChildID = 1, GrandChildID = 2});
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 try
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 var q =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 from p in db.Parent
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 where ids.Contains(p.ParentID)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 select p;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 var n1 = q.SelectMany(p => p.Children).SelectMany(gc => gc.GrandChildren).Delete();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 Assert.That(n1, Is.EqualTo(2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 finally
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265 db.GrandChild.Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 db.Child. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 db.Parent. Delete(c => c.ParentID >= 1000);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 }