comparison UnitTests/Linq/InsertTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 using System;
2 using System.Linq;
3
4 using BLToolkit.Data;
5 using BLToolkit.Data.DataProvider;
6 using BLToolkit.Data.Linq;
7 using BLToolkit.Data.Sql.SqlProvider;
8 using BLToolkit.DataAccess;
9 using BLToolkit.Mapping;
10
11 using NUnit.Framework;
12
13 using Data.Linq;
14 using Data.Linq.Model;
15
16 #region ReSharper disable
17 // ReSharper disable ConvertToConstant.Local
18 #endregion
19
20 namespace Update
21 {
22 [TestFixture]
23 public class InsertTest : TestBase
24 {
25 [Test]
26 public void DistinctInsert1()
27 {
28 ForEachProvider(new[] { ProviderName.DB2, ProviderName.Informix, ProviderName.PostgreSQL, ProviderName.SQLite, ProviderName.Access }, db =>
29 {
30 try
31 {
32 db.Types.Delete(c => c.ID > 1000);
33
34 Assert.AreEqual(
35 Types.Select(_ => _.ID / 3).Distinct().Count(),
36 db
37 .Types
38 .Select(_ => Math.Floor(_.ID / 3.0))
39 .Distinct()
40 .Insert(db.Types, _ => new LinqDataTypes
41 {
42 ID = (int)(_ + 1001),
43 GuidValue = Sql.NewGuid(),
44 BoolValue = true
45 }));
46 }
47 finally
48 {
49 db.Types.Delete(c => c.ID > 1000);
50 }
51 });
52 }
53
54 [Test]
55 public void DistinctInsert2()
56 {
57 ForEachProvider(new[] { ProviderName.DB2, ProviderName.Informix, ProviderName.PostgreSQL, ProviderName.SQLite, ProviderName.Access }, db =>
58 {
59 try
60 {
61 db.Types.Delete(c => c.ID > 1000);
62
63 Assert.AreEqual(
64 Types.Select(_ => _.ID / 3).Distinct().Count(),
65 db.Types
66 .Select(_ => Math.Floor(_.ID / 3.0))
67 .Distinct()
68 .Into(db.Types)
69 .Value(t => t.ID, t => (int)(t + 1001))
70 .Value(t => t.GuidValue, t => Sql.NewGuid())
71 .Value(t => t.BoolValue, t => true)
72 .Insert());
73 }
74 finally
75 {
76 db.Types.Delete(c => c.ID > 1000);
77 }
78 });
79 }
80
81 [Test]
82 public void Insert1()
83 {
84 ForEachProvider(db =>
85 {
86 try
87 {
88 var id = 1001;
89
90 db.Child.Delete(c => c.ChildID > 1000);
91
92 Assert.AreEqual(1,
93 db.Child
94 .Insert(() => new Child
95 {
96 ParentID = 1,
97 ChildID = id
98 }));
99
100 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
101 }
102 finally
103 {
104 db.Child.Delete(c => c.ChildID > 1000);
105 }
106 });
107 }
108
109 [Test]
110 public void Insert2()
111 {
112 ForEachProvider(db =>
113 {
114 try
115 {
116 var id = 1001;
117
118 db.Child.Delete(c => c.ChildID > 1000);
119
120 Assert.AreEqual(1,
121 db
122 .Into(db.Child)
123 .Value(c => c.ParentID, () => 1)
124 .Value(c => c.ChildID, () => id)
125 .Insert());
126 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
127 }
128 finally
129 {
130 db.Child.Delete(c => c.ChildID > 1000);
131 }
132 });
133 }
134
135 [Test]
136 public void Insert3()
137 {
138 ForEachProvider(db =>
139 {
140 try
141 {
142 var id = 1001;
143
144 db.Child.Delete(c => c.ChildID > 1000);
145
146 Assert.AreEqual(1,
147 db.Child
148 .Where(c => c.ChildID == 11)
149 .Insert(db.Child, c => new Child
150 {
151 ParentID = c.ParentID,
152 ChildID = id
153 }));
154 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
155 }
156 finally
157 {
158 db.Child.Delete(c => c.ChildID > 1000);
159 }
160 });
161 }
162
163 [Test]
164 public void Insert31()
165 {
166 ForEachProvider(db =>
167 {
168 try
169 {
170 var id = 1001;
171
172 db.Child.Delete(c => c.ChildID > 1000);
173
174 Assert.AreEqual(1,
175 db.Child
176 .Where(c => c.ChildID == 11)
177 .Select(c => new Child
178 {
179 ParentID = c.ParentID,
180 ChildID = id
181 })
182 .Insert(db.Child, c => c));
183 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
184 }
185 finally
186 {
187 db.Child.Delete(c => c.ChildID > 1000);
188 }
189 });
190 }
191
192 [Test]
193 public void Insert4()
194 {
195 ForEachProvider(db =>
196 {
197 try
198 {
199 var id = 1001;
200
201 db.Child.Delete(c => c.ChildID > 1000);
202
203 Assert.AreEqual(1,
204 db.Child
205 .Where(c => c.ChildID == 11)
206 .Into(db.Child)
207 .Value(c => c.ParentID, c => c.ParentID)
208 .Value(c => c.ChildID, () => id)
209 .Insert());
210 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
211 }
212 finally
213 {
214 db.Child.Delete(c => c.ChildID > 1000);
215 }
216 });
217 }
218
219 [Test]
220 public void Insert5()
221 {
222 ForEachProvider(db =>
223 {
224 try
225 {
226 var id = 1001;
227
228 db.Child.Delete(c => c.ChildID > 1000);
229
230 Assert.AreEqual(1,
231 db.Child
232 .Where(c => c.ChildID == 11)
233 .Into(db.Child)
234 .Value(c => c.ParentID, c => c.ParentID)
235 .Value(c => c.ChildID, id)
236 .Insert());
237 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
238 }
239 finally
240 {
241 db.Child.Delete(c => c.ChildID > 1000);
242 }
243 });
244 }
245
246 [Test]
247 public void Insert6()
248 {
249 ForEachProvider(db =>
250 {
251 try
252 {
253 db.Parent.Delete(p => p.Value1 == 11);
254
255 Assert.AreEqual(1,
256 db.Child
257 .Where(c => c.ChildID == 11)
258 .Into(db.Parent)
259 .Value(p => p.ParentID, c => c.ParentID)
260 .Value(p => p.Value1, c => (int?)c.ChildID)
261 .Insert());
262 Assert.AreEqual(1, db.Parent.Count(p => p.Value1 == 11));
263 }
264 finally
265 {
266 db.Parent.Delete(p => p.Value1 == 11);
267 }
268 });
269 }
270
271 [Test]
272 public void Insert7()
273 {
274 ForEachProvider(db =>
275 {
276 try
277 {
278 var id = 1001;
279
280 db.Child.Delete(c => c.ChildID > 1000);
281
282 Assert.AreEqual(1,
283 db
284 .Child
285 .Value(c => c.ChildID, () => id)
286 .Value(c => c.ParentID, 1)
287 .Insert());
288 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
289 }
290 finally
291 {
292 db.Child.Delete(c => c.ChildID > 1000);
293 }
294 });
295 }
296
297 [Test]
298 public void Insert8()
299 {
300 ForEachProvider(db =>
301 {
302 try
303 {
304 var id = 1001;
305
306 db.Child.Delete(c => c.ChildID > 1000);
307
308 Assert.AreEqual(1,
309 db
310 .Child
311 .Value(c => c.ParentID, 1)
312 .Value(c => c.ChildID, () => id)
313 .Insert());
314 Assert.AreEqual(1, db.Child.Count(c => c.ChildID == id));
315 }
316 finally
317 {
318 db.Child.Delete(c => c.ChildID > 1000);
319 }
320 });
321 }
322
323 [Test]
324 public void Insert9()
325 {
326 ForEachProvider(db =>
327 {
328 try
329 {
330 var id = 1001;
331
332 db.Child. Delete(c => c.ParentID > 1000);
333 db.Parent.Delete(p => p.ParentID > 1000);
334
335 db.Insert(new Parent { ParentID = id, Value1 = id });
336
337 Assert.AreEqual(1,
338 db.Parent
339 .Where(p => p.ParentID == id)
340 .Insert(db.Child, p => new Child
341 {
342 ParentID = p.ParentID,
343 ChildID = p.ParentID,
344 }));
345 Assert.AreEqual(1, db.Child.Count(c => c.ParentID == id));
346 }
347 finally
348 {
349 db.Child. Delete(c => c.ParentID > 1000);
350 db.Parent.Delete(p => p.ParentID > 1000);
351 }
352 });
353 }
354
355 [TableName("LinqDataTypes")]
356 public class LinqDataTypesArrayTest
357 {
358 public int ID;
359 public decimal MoneyValue;
360 public DateTime DateTimeValue;
361 public bool BoolValue;
362 public Guid GuidValue;
363 public byte[] BinaryValue;
364 public short SmallIntValue;
365 }
366
367 [Test]
368 public void InsertArray1()
369 {
370 ForEachProvider(db =>
371 {
372 try
373 {
374 var types = db.GetTable<LinqDataTypesArrayTest>();
375
376 types.Delete(t => t.ID > 1000);
377 types.Insert(() => new LinqDataTypesArrayTest { ID = 1001, BoolValue = true, BinaryValue = null });
378
379 Assert.IsNull(types.Single(t => t.ID == 1001).BinaryValue);
380 }
381 finally
382 {
383 db.GetTable<LinqDataTypesArrayTest>().Delete(t => t.ID > 1000);
384 }
385 });
386 }
387
388 [Test]
389 public void InsertArray2()
390 {
391 ForEachProvider(db =>
392 {
393 try
394 {
395 var types = db.GetTable<LinqDataTypesArrayTest>();
396
397 types.Delete(t => t.ID > 1000);
398
399 byte[] arr = null;
400
401 types.Insert(() => new LinqDataTypesArrayTest { ID = 1001, BoolValue = true, BinaryValue = arr });
402
403 var res = types.Single(t => t.ID == 1001).BinaryValue;
404
405 Assert.IsNull(res);
406 }
407 finally
408 {
409 db.GetTable<LinqDataTypesArrayTest>().Delete(t => t.ID > 1000);
410 }
411 });
412 }
413
414 [Test]
415 public void InsertUnion1()
416 {
417 Child.Count();
418
419 ForEachProvider(
420 db =>
421 {
422 db.Parent.Delete(p => p.ParentID > 1000);
423
424 try
425 {
426 var q =
427 db.Child. Select(c => new Parent { ParentID = c.ParentID, Value1 = (int) Math.Floor(c.ChildID / 10.0) }).Union(
428 db.GrandChild.Select(c => new Parent { ParentID = c.ParentID ?? 0, Value1 = (int?)Math.Floor((c.GrandChildID ?? 0) / 100.0) }));
429
430 q.Insert(db.Parent, p => new Parent
431 {
432 ParentID = p.ParentID + 1000,
433 Value1 = p.Value1
434 });
435
436 Assert.AreEqual(
437 Child. Select(c => new { ParentID = c.ParentID }).Union(
438 GrandChild.Select(c => new { ParentID = c.ParentID ?? 0 })).Count(),
439 db.Parent.Count(c => c.ParentID > 1000));
440 }
441 finally
442 {
443 db.Parent.Delete(p => p.ParentID > 1000);
444 }
445 });
446 }
447
448 [Test]
449 public void InsertEnum1()
450 {
451 ForEachProvider(db =>
452 {
453 try
454 {
455 var id = 1001;
456
457 db.Parent4.Delete(_ => _.ParentID > 1000);
458
459 var p = new Parent4
460 {
461 ParentID = id,
462 Value1 = TypeValue.Value2
463 };
464
465 Assert.AreEqual(1,
466 db.Parent4
467 .Insert(() => new Parent4
468 {
469 ParentID = 1001,
470 Value1 = p.Value1
471 }));
472
473 Assert.AreEqual(1, db.Parent4.Count(_ => _.ParentID == id && _.Value1 == p.Value1));
474 }
475 finally
476 {
477 db.Parent4.Delete(_ => _.ParentID > 1000);
478 }
479 });
480 }
481
482 [Test]
483 public void InsertEnum2()
484 {
485 ForEachProvider(db =>
486 {
487 try
488 {
489 var id = 1001;
490
491 db.Parent4.Delete(_ => _.ParentID > 1000);
492
493 Assert.AreEqual(1,
494 db.Parent4
495 .Value(_ => _.ParentID, id)
496 .Value(_ => _.Value1, TypeValue.Value1)
497 .Insert());
498
499 Assert.AreEqual(1, db.Parent4.Count(_ => _.ParentID == id));
500 }
501 finally
502 {
503 db.Parent4.Delete(_ => _.ParentID > 1000);
504 }
505 });
506 }
507
508 [Test]
509 public void InsertEnum3()
510 {
511 ForEachProvider(db =>
512 {
513 try
514 {
515 var id = 1001;
516
517 db.Parent4.Delete(_ => _.ParentID > 1000);
518
519 Assert.AreEqual(1,
520 db.Parent4
521 .Value(_ => _.ParentID, id)
522 .Value(_ => _.Value1, () => TypeValue.Value1)
523 .Insert());
524
525 Assert.AreEqual(1, db.Parent4.Count(_ => _.ParentID == id));
526 }
527 finally
528 {
529 db.Parent4.Delete(_ => _.ParentID > 1000);
530 }
531 });
532 }
533
534 [Test]
535 public void InsertNull()
536 {
537 ForEachProvider(db =>
538 {
539 try
540 {
541 db.Parent.Delete(p => p.ParentID == 1001);
542
543 Assert.AreEqual(1,
544 db
545 .Into(db.Parent)
546 .Value(p => p.ParentID, 1001)
547 .Value(p => p.Value1, (int?)null)
548 .Insert());
549 Assert.AreEqual(1, db.Parent.Count(p => p.ParentID == 1001));
550 }
551 finally
552 {
553 db.Parent.Delete(p => p.Value1 == 1001);
554 }
555 });
556 }
557
558 [Test]
559 public void InsertWithIdentity1()
560 {
561 ForEachProvider(db =>
562 {
563 try
564 {
565 db.Person.Delete(p => p.ID > 2);
566
567 var id =
568 db.Person
569 .InsertWithIdentity(() => new Person
570 {
571 FirstName = "John",
572 LastName = "Shepard",
573 Gender = Gender.Male
574 });
575
576 Assert.NotNull(id);
577
578 var john = db.Person.Single(p => p.FirstName == "John" && p.LastName == "Shepard");
579
580 Assert.NotNull (john);
581 Assert.AreEqual(id, john.ID);
582 }
583 finally
584 {
585 db.Person.Delete(p => p.ID > 2);
586 }
587 });
588 }
589
590 [Test]
591 public void InsertWithIdentity2()
592 {
593 ForEachProvider(db =>
594 {
595 try
596 {
597 db.Person.Delete(p => p.ID > 2);
598
599 var id = db
600 .Into(db.Person)
601 .Value(p => p.FirstName, () => "John")
602 .Value(p => p.LastName, () => "Shepard")
603 .Value(p => p.Gender, () => Gender.Male)
604 .InsertWithIdentity();
605
606 Assert.NotNull(id);
607
608 var john = db.Person.Single(p => p.FirstName == "John" && p.LastName == "Shepard");
609
610 Assert.NotNull (john);
611 Assert.AreEqual(id, john.ID);
612 }
613 finally
614 {
615 db.Person.Delete(p => p.ID > 2);
616 }
617 });
618 }
619
620 [Test]
621 public void InsertWithIdentity3()
622 {
623 ForEachProvider(db =>
624 {
625 try
626 {
627 db.Person.Delete(p => p.ID > 2);
628
629 var id = db
630 .Into(db.Person)
631 .Value(p => p.FirstName, "John")
632 .Value(p => p.LastName, "Shepard")
633 .Value(p => p.Gender, Gender.Male)
634 .InsertWithIdentity();
635
636 Assert.NotNull(id);
637
638 var john = db.Person.Single(p => p.FirstName == "John" && p.LastName == "Shepard");
639
640 Assert.NotNull (john);
641 Assert.AreEqual(id, john.ID);
642 }
643 finally
644 {
645 db.Person.Delete(p => p.ID > 2);
646 }
647 });
648 }
649
650 [Test]
651 public void InsertWithIdentity4()
652 {
653 ForEachProvider(db =>
654 {
655 try
656 {
657 for (var i = 0; i < 2; i++)
658 {
659 db.Person.Delete(p => p.ID > 2);
660
661 var id = db.InsertWithIdentity(
662 new Person
663 {
664 FirstName = "John" + i,
665 LastName = "Shepard",
666 Gender = Gender.Male
667 });
668
669 Assert.NotNull(id);
670
671 var john = db.Person.Single(p => p.FirstName == "John" + i && p.LastName == "Shepard");
672
673 Assert.NotNull (john);
674 Assert.AreEqual(id, john.ID);
675 }
676 }
677 finally
678 {
679 db.Person.Delete(p => p.ID > 2);
680 }
681 });
682 }
683
684 [Test]
685 public void InsertWithIdentity5()
686 {
687 ForEachProvider(db =>
688 {
689 try
690 {
691 for (var i = 0; i < 2; i++)
692 {
693 db.Person.Delete(p => p.ID > 2);
694
695 var person = new Person
696 {
697 FirstName = "John" + i,
698 LastName = "Shepard",
699 Gender = Gender.Male
700 };
701
702 var id = db.InsertWithIdentity(person);
703
704 Assert.NotNull(id);
705
706 var john = db.Person.Single(p => p.FirstName == "John" + i && p.LastName == "Shepard");
707
708 Assert.NotNull (john);
709 Assert.AreEqual(id, john.ID);
710 }
711 }
712 finally
713 {
714 db.Person.Delete(p => p.ID > 2);
715 }
716 });
717 }
718
719 [Test]
720 public void InsertOrUpdate1()
721 {
722 ForEachProvider(db =>
723 {
724 var id = 0;
725
726 try
727 {
728 id = Convert.ToInt32(db.Person.InsertWithIdentity(() => new Person
729 {
730 FirstName = "John",
731 LastName = "Shepard",
732 Gender = Gender.Male
733 }));
734
735 for (var i = 0; i < 3; i++)
736 {
737 db.Patient.InsertOrUpdate(
738 () => new Patient
739 {
740 PersonID = id,
741 Diagnosis = "abc",
742 },
743 p => new Patient
744 {
745 Diagnosis = (p.Diagnosis.Length + i).ToString(),
746 });
747 }
748
749 Assert.AreEqual("3", db.Patient.Single(p => p.PersonID == id).Diagnosis);
750 }
751 finally
752 {
753 db.Patient.Delete(p => p.PersonID == id);
754 db.Person. Delete(p => p.ID == id);
755 }
756 });
757 }
758
759 [Test]
760 public void InsertOrReplace1()
761 {
762 ForEachProvider(db =>
763 {
764 var id = 0;
765
766 try
767 {
768 id = Convert.ToInt32(db.Person.InsertWithIdentity(() => new Person
769 {
770 FirstName = "John",
771 LastName = "Shepard",
772 Gender = Gender.Male
773 }));
774
775 for (var i = 0; i < 3; i++)
776 {
777 db.InsertOrReplace(new Patient
778 {
779 PersonID = id,
780 Diagnosis = ("abc" + i).ToString(),
781 });
782 }
783
784 Assert.AreEqual("abc2", db.Patient.Single(p => p.PersonID == id).Diagnosis);
785 }
786 finally
787 {
788 db.Patient.Delete(p => p.PersonID == id);
789 db.Person. Delete(p => p.ID == id);
790 }
791 });
792 }
793
794 [Test]
795 public void InsertOrUpdate3()
796 {
797 ForEachProvider(db =>
798 {
799 var id = 0;
800
801 try
802 {
803 id = Convert.ToInt32(db.Person.InsertWithIdentity(() => new Person
804 {
805 FirstName = "John",
806 LastName = "Shepard",
807 Gender = Gender.Male
808 }));
809
810 var diagnosis = "abc";
811
812 for (var i = 0; i < 3; i++)
813 {
814 db.Patient.InsertOrUpdate(
815 () => new Patient
816 {
817 PersonID = id,
818 Diagnosis = "abc",
819 },
820 p => new Patient
821 {
822 Diagnosis = (p.Diagnosis.Length + i).ToString(),
823 },
824 () => new Patient
825 {
826 PersonID = id,
827 //Diagnosis = diagnosis,
828 });
829
830 diagnosis = (diagnosis.Length + i).ToString();
831 }
832
833 Assert.AreEqual("3", db.Patient.Single(p => p.PersonID == id).Diagnosis);
834 }
835 finally
836 {
837 db.Patient.Delete(p => p.PersonID == id);
838 db.Person. Delete(p => p.ID == id);
839 }
840 });
841 }
842
843 [Test]
844 public void InsertBatch1()
845 {
846 ForEachProvider(new[] { ProviderName.PostgreSQL }, db =>
847 {
848 if (db is DbManager && ((DbManager)db).ConfigurationString == "Oracle")
849 {
850 db.Types2.Delete(_ => _.ID > 1000);
851
852 ((DbManager)db).InsertBatch(1, new[]
853 {
854 new LinqDataTypes2 { ID = 1003, MoneyValue = 0m, DateTimeValue = null, BoolValue = true, GuidValue = new Guid("ef129165-6ffe-4df9-bb6b-bb16e413c883"), SmallIntValue = null, IntValue = null },
855 new LinqDataTypes2 { ID = 1004, MoneyValue = 0m, DateTimeValue = DateTime.Now, BoolValue = false, GuidValue = null, SmallIntValue = 2, IntValue = 1532334 },
856 });
857
858 db.Types2.Delete(_ => _.ID > 1000);
859 }
860 });
861 }
862
863 [Test]
864 public void InsertBatch2([IncludeDataContexts("Sql2008", "Sql2012")] string context)
865 {
866 using (var db = new TestDbManager(context))
867 {
868 db.Types2.Delete(_ => _.ID > 1000);
869
870 db.InsertBatch(100, new[]
871 {
872 new LinqDataTypes2 { ID = 1003, MoneyValue = 0m, DateTimeValue = null, BoolValue = true, GuidValue = new Guid("ef129165-6ffe-4df9-bb6b-bb16e413c883"), SmallIntValue = null, IntValue = null },
873 new LinqDataTypes2 { ID = 1004, MoneyValue = 0m, DateTimeValue = DateTime.Now, BoolValue = false, GuidValue = null, SmallIntValue = 2, IntValue = 1532334 },
874 });
875
876 db.Types2.Delete(_ => _.ID > 1000);
877 }
878 }
879
880 [TableName("Parent")]
881 public class NullableFieldTestObject
882 {
883 public int ParentID;
884 [BLToolkit.Mapping.Nullable] public int Value1;
885 }
886
887 [Test]
888 public void NullableFieldTest()
889 {
890 ForEachProvider(db =>
891 {
892 db.Parent.Delete(p => p.ParentID == 1100);
893
894 db.Insert(new NullableFieldTestObject { ParentID = 1100 });
895
896 var parent = db.Parent.Single(p => p.ParentID == 1100);
897
898 Assert.IsNull(parent.Value1);
899 });
900 }
901
902 public class FullName
903 {
904 public string FirstName { get; set; }
905 public string LastName;
906 [Nullable] public string MiddleName;
907 }
908
909 [TableName("Person")]
910 [MapField("FirstName", "Name.FirstName")]
911 [MapField("LastName", "Name.LastName")]
912 [MapField("MiddleName", "Name.MiddleName")]
913 public class TestPerson1
914 {
915 [Identity, PrimaryKey]
916 //[SequenceName("PostgreSQL", "Seq")]
917 [SequenceName("Firebird", "PersonID")]
918 [MapField("PersonID")]
919 public int ID;
920
921 public string Gender;
922
923 public FullName Name;
924 }
925
926 [Test]
927 public void Insert11()
928 {
929 var p = new TestPerson1 { Name = new FullName { FirstName = "fn", LastName = "ln" }, Gender = "M" };
930
931 ForEachProvider(db => db.Insert(p));
932 }
933
934 [Test]
935 public void Insert12()
936 {
937 ForEachProvider(db => db
938 .Into(db.GetTable<TestPerson1>())
939 .Value(_ => _.Name.FirstName, "FirstName")
940 .Value(_ => _.Name.LastName, () => "LastName")
941 .Value(_ => _.Gender, "F")
942 .Insert());
943
944 }
945
946 [Test]
947 public void Insert13()
948 {
949 ForEachProvider(db => db.GetTable<TestPerson1>()
950 .Insert(() => new TestPerson1
951 {
952 Name = new FullName
953 {
954 FirstName = "FirstName",
955 LastName = "LastName"
956 },
957 Gender = "M",
958 }));
959 }
960
961 [Test]
962 public void Insert14()
963 {
964 ForEachProvider(
965 new [] { ProviderName.SqlCe, ProviderName.Access, "Sql2000", "Sql2005", ProviderName.Sybase },
966 db =>
967 {
968 try
969 {
970 db.Person.Delete(p => p.FirstName.StartsWith("Insert14"));
971
972 Assert.AreEqual(1,
973 db.Person
974 .Insert(() => new Person
975 {
976 FirstName = "Insert14" + db.Person.Where(p => p.ID == 1).Select(p => p.FirstName).FirstOrDefault(),
977 LastName = "Shepard",
978 Gender = Gender.Male
979 }));
980
981 Assert.AreEqual(1, db.Person.Count(p => p.FirstName.StartsWith("Insert14")));
982 }
983 finally
984 {
985 db.Person.Delete(p => p.FirstName.StartsWith("Insert14"));
986 }
987 });
988 }
989
990 [Test]
991 public void InsertSingleIdentity()
992 {
993 ForEachProvider(
994 new [] { ProviderName.Informix, ProviderName.SqlCe },
995 db =>
996 {
997 try
998 {
999 db.TestIdentity.Delete();
1000
1001 var id = db.TestIdentity.InsertWithIdentity(() => new TestIdentity {});
1002
1003 Assert.NotNull(id);
1004 }
1005 finally
1006 {
1007 db.TestIdentity.Delete();
1008 }
1009 });
1010 }
1011 }
1012 }