annotate HowTo/Data/UpdateObject.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.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Data;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace HowTo.Data
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class UpdateObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public enum Gender
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 [MapValue("F")] Female,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [MapValue("M")] Male,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [MapValue("U")] Unknown,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 [MapValue("O")] Other
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public abstract class Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 [MapField("PersonID")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public abstract int ID { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public abstract string LastName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public abstract string FirstName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public abstract string MiddleName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public abstract Gender Gender { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 int InsertPerson(Person person)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 return db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 .SetCommand(@"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 INSERT INTO Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 ( LastName, FirstName, MiddleName, Gender)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 VALUES
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 (@LastName, @FirstName, @MiddleName, @Gender)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 SELECT Cast(SCOPE_IDENTITY() as int)",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 db.CreateParameters(person))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 .ExecuteScalar<int>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 Person GetPersonByID(int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 return db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 .SetCommand("SELECT * FROM Person WHERE PersonID = @id",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 db.Parameter("@id", id))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 .ExecuteObject<Person>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 void UpdatePerson(Person person)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 .SetCommand(@"
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 UPDATE
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 SET
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 LastName = @LastName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 FirstName = @FirstName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 MiddleName = @MiddleName,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 Gender = @Gender
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 WHERE
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 PersonID = @PersonID",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 db.CreateParameters(person))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 .ExecuteNonQuery();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 void DeletePerson(int id)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 db
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 .SetCommand("DELETE FROM Person WHERE PersonID = @id",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 db.Parameter("@id", id))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 .ExecuteNonQuery();
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 Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 // Insert.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 Person person = TypeAccessor<Person>.CreateInstanceEx();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 person.FirstName = "Crazy";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 person.LastName = "Frog";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 person.Gender = Gender.Unknown;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 int id = InsertPerson(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 person = GetPersonByID(id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 TypeAccessor.WriteConsole(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 Assert.IsNotNull(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 // Update.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 person.Gender = Gender.Other;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 UpdatePerson(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 person = GetPersonByID(id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 TypeAccessor.WriteConsole(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 Assert.AreEqual(Gender.Other, person.Gender);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 // Delete.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 DeletePerson(id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 person = GetPersonByID(id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 Assert.IsNull(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132