2 using System.Collections;
\r
3 using System.Collections.Generic;
\r
7 using NUnit.Framework;
\r
8 using Test_NUnit.Linq_101_Samples;
\r
9 using System.Data.Linq;
\r
12 using DataLoadOptions = System.Data.Linq.DataLoadOptions;
\r
14 using DataLoadOptions = DbLinq.Data.Linq.DataLoadOptions;
\r
21 namespace Test_NUnit_MySql
\r
23 namespace Test_NUnit_OracleODP
\r
25 namespace Test_NUnit_Oracle
\r
27 namespace Test_NUnit_PostgreSql
\r
29 namespace Test_NUnit_Sqlite
\r
31 namespace Test_NUnit_Ingres
\r
32 #elif MSSQL && MONO_STRICT
\r
33 namespace Test_NUnit_MsSql_Strict
\r
35 namespace Test_NUnit_MsSql
\r
37 namespace Test_NUnit_Firebird
\r
41 public class EntitySet : TestBase
\r
45 public void SimpleMemberAccess01()
\r
47 var customer = new Customer();
\r
48 var orders = customer.Orders;
\r
52 public void SimpleMemberAccess02()
\r
54 var db = CreateDB();
\r
55 var customer = db.Customers.First();
\r
56 Assert.Greater(customer.Orders.Count, 0);
\r
60 public void EntitySetEnumerationProjection()
\r
62 var db = CreateDB();
\r
63 var results = (from c in db.Customers select c.Orders).ToList();
\r
65 Assert.Greater(results.Count, 0);
\r
69 public void HasLoadedOrAsignedValues01()
\r
71 var db = CreateDB();
\r
72 var customer = db.Customers.First();
\r
73 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues);
\r
75 customer.Orders.Add(new Order());
\r
76 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues);
\r
80 public void HasLoadedOrAsignedValues02()
\r
82 var db = CreateDB();
\r
83 var customer = db.Customers.First();
\r
84 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues);
\r
86 customer.Orders.Assign(System.Linq.Enumerable.Empty<Order>());
\r
87 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues);
\r
92 [ExpectedException(typeof(InvalidOperationException))]
\r
93 public void InvalidSourceChange()
\r
95 var db = CreateDB();
\r
96 var customer = db.Customers.First();
\r
98 Assert.Greater(customer.Orders.Count, 0, "#1");
\r
99 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
100 customer.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
104 [ExpectedException(typeof(InvalidOperationException))]
\r
105 public void InvalidSourceChange2()
\r
107 var db = CreateDB();
\r
108 var customer = db.Customers.First();
\r
109 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues, "#1");
\r
110 customer.Orders.Assign(new List<Order>());
\r
111 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
112 customer.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
116 [ExpectedException(typeof(InvalidOperationException))]
\r
117 public void InvalidSourceChange3()
\r
119 var db = CreateDB();
\r
120 var customer = db.Customers.First();
\r
121 customer.Orders.SetSource(new List<Order>());
\r
122 Assert.IsFalse(customer.Orders.HasLoadedOrAssignedValues, "#1");
\r
123 customer.Orders.Load();
\r
124 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
125 customer.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
129 public void SourceChange()
\r
131 var db = CreateDB();
\r
133 int ordersCount = (from cust in db.Customers
\r
134 select cust.Orders.Count).First();
\r
136 Assert.Greater(ordersCount, 0);
\r
138 var customer2 = db.Customers.First();
\r
139 customer2.Orders.SetSource(System.Linq.Enumerable.Empty<Order>());
\r
140 Assert.AreEqual(customer2.Orders.Count, 0);
\r
145 public void Refresh01()
\r
147 var db = CreateDB();
\r
148 var c = db.Customers.First();
\r
150 int beforeCount = c.Orders.Count;
\r
151 Assert.Greater(beforeCount, 0);
\r
153 Assert.AreEqual(c.Orders.Count, 0);
\r
154 c.Orders.AddRange(db.Orders);
\r
155 Assert.Greater(c.Orders.Count, beforeCount);
\r
156 db.Refresh(RefreshMode.OverwriteCurrentValues, c.Orders);
\r
158 Assert.AreEqual(c.Orders.Count, beforeCount);
\r
162 public void Refresh02()
\r
164 var db = CreateDB();
\r
165 var c = db.Customers.First();
\r
167 int beforeCount = c.Orders.Count;
\r
168 Assert.Greater(beforeCount, 0);
\r
170 Assert.AreEqual(c.Orders.Count, 0);
\r
171 c.Orders.AddRange(db.Orders);
\r
173 int middleCount = c.Orders.Count;
\r
174 Assert.Greater(c.Orders.Count, beforeCount);
\r
176 db.Refresh(RefreshMode.KeepCurrentValues, c.Orders);
\r
177 Assert.AreEqual(c.Orders.Count, middleCount);
\r
179 db.Refresh(RefreshMode.KeepChanges, c.Orders);
\r
180 Assert.AreEqual(c.Orders.Count, middleCount);
\r
185 public void Refresh03()
\r
187 var db = CreateDB();
\r
188 var c = db.Customers.First();
\r
190 var order = c.Orders.First();
\r
191 string newcustomerId = "NEWCUSTOMERID";
\r
192 order.CustomerID = newcustomerId;
\r
194 db.Refresh(RefreshMode.OverwriteCurrentValues, c.Orders);
\r
195 Assert.AreNotEqual(order.CustomerID, newcustomerId);
\r
199 public void Refresh04()
\r
201 var db = CreateDB();
\r
202 var c = db.Customers.First();
\r
204 var order = c.Orders.First();
\r
205 string newcustomerId = "NEWCUSTOMERID";
\r
206 order.CustomerID = newcustomerId;
\r
208 db.Refresh(RefreshMode.KeepCurrentValues, c.Orders);
\r
209 Assert.AreEqual(order.CustomerID, newcustomerId);
\r
211 db.Refresh(RefreshMode.KeepChanges, c.Orders);
\r
212 Assert.AreEqual(order.CustomerID, newcustomerId);
\r
217 public void ListChangedEvent()
\r
219 var db = CreateDB();
\r
220 var customer = db.Customers.Where(c => c.Orders.Count > 0).First();
\r
221 Assert.Greater(customer.Orders.Count, 0);
\r
223 System.ComponentModel.ListChangedEventArgs args = null;
\r
224 customer.Orders.ListChanged += delegate(object sender, System.ComponentModel.ListChangedEventArgs a)
\r
232 customer.Orders.Remove(customer.Orders.First());
\r
237 customer.Orders.Assign(Enumerable.Empty<Order>());
\r
242 customer.Orders.Add(db.Orders.First());
\r
247 customer.Orders.Clear();
\r
252 customer.Orders.Insert(0, new Order());
\r
257 customer.Orders.RemoveAt(0);
\r
264 var db = CreateDB();
\r
265 var customer = db.Customers.First();
\r
266 var orders = customer.Orders;
\r
268 Assert.IsFalse(orders.HasLoadedOrAssignedValues);
\r
270 Assert.IsTrue(orders.HasLoadedOrAssignedValues);
\r
274 public void DeferedExecution()
\r
276 var db = CreateDB();
\r
277 var customer = db.Customers.First();
\r
278 Assert.IsTrue(customer.Orders.IsDeferred);
\r
280 customer.Orders.Load();
\r
281 Assert.IsFalse(customer.Orders.IsDeferred);
\r
285 public void DeferedExecutionAndLoadWith()
\r
287 var db = CreateDB();
\r
288 DataLoadOptions loadoptions = new DataLoadOptions();
\r
289 loadoptions.LoadWith<Customer>(c => c.Orders);
\r
290 db.LoadOptions = loadoptions;
\r
292 var customer = db.Customers.First();
\r
293 Assert.IsFalse(customer.Orders.IsDeferred, "#1");
\r
294 Assert.IsTrue(customer.Orders.HasLoadedOrAssignedValues, "#2");
\r
300 var db = CreateDB();
\r
301 var customer = db.Customers.First();
\r
302 Assert.AreEqual("jacques", customer.ContactName, "#1");
\r
303 int beforeCount = customer.Orders.Count;
\r
304 Assert.AreEqual(1, beforeCount, "#2");
\r
305 var order = new Order();
\r
306 customer.Orders.Add(order);
\r
307 Assert.AreEqual(beforeCount + 1, customer.Orders.Count, "#3");
\r
308 customer.Orders.Add(order); // do not actually add
\r
309 Assert.AreEqual(beforeCount + 1, customer.Orders.Count, "#4");
\r
313 [ExpectedException (typeof (ArgumentOutOfRangeException))]
\r
314 public void IList_Add()
\r
316 var db = CreateDB();
\r
317 var customer = db.Customers.First();
\r
318 Assert.AreEqual("jacques", customer.ContactName, "#1");
\r
319 int beforeCount = customer.Orders.Count;
\r
320 Assert.AreEqual(1, beforeCount, "#2");
\r
321 var order = new Order();
\r
322 ((IList)customer.Orders).Add(order);
\r
323 ((IList)customer.Orders).Add(order); // raises ArgumentOutOfRangeException for duplicate
\r
327 public void Clear()
\r
329 var db = CreateDB();
\r
330 var customer = db.Customers.First();
\r
332 if (customer.Orders.Count == 0)
\r
335 customer.Orders.Clear();
\r
336 Assert.AreEqual(customer.Orders.Count, 0);
\r
340 public void AddRange()
\r
342 var db = CreateDB();
\r
343 var customer = db.Customers.First();
\r
344 int beforeCount = customer.Orders.Count;
\r
345 var order = new Order();
\r
346 customer.Orders.AddRange(new Order[] { order, new Order() });
\r
347 Assert.AreEqual(beforeCount + 2, customer.Orders.Count);
\r
348 customer.Orders.AddRange(new Order[] { new Order(), order }); // one is existing -> not added
\r
349 Assert.AreEqual(beforeCount + 3, customer.Orders.Count);
\r
353 public void Remove()
\r
355 var db = CreateDB();
\r
356 var customer = db.Customers.First();
\r
357 int beforeCount = customer.Orders.Count;
\r
359 if (beforeCount == 0)
\r
362 customer.Orders.Remove(customer.Orders.First());
\r
363 Assert.AreEqual(customer.Orders.Count, beforeCount - 1);
\r
367 public void RemoveAt()
\r
369 var db = CreateDB();
\r
370 var customer = db.Customers.First();
\r
371 int beforeCount = customer.Orders.Count;
\r
373 if (beforeCount == 0)
\r
376 customer.Orders.RemoveAt(0);
\r
377 Assert.AreEqual(customer.Orders.Count, beforeCount - 1);
\r
381 public void RemoveAll()
\r