annotate HowTo/DataAccess/PersonAccessor.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
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.DataAccess;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Mapping;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 namespace HowTo.DataAccess
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public class PersonAccessorTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public enum Gender
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [MapValue("F")] Female,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 [MapValue("M")] Male,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 [MapValue("U")] Unknown,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 [MapValue("O")] Other
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public abstract class Person
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 [MapField("PersonID"), PrimaryKey, NonUpdatable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public abstract int ID { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public abstract string LastName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public abstract string FirstName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public abstract string MiddleName { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public abstract Gender Gender { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public static Person CreateInstance()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 return TypeAccessor<Person>.CreateInstanceEx();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public abstract class PersonAccessor : DataAccessor<Person>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 [SprocName("Person_SelectByKey")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public abstract Person SelectByID (int id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 public abstract Person SelectByName(Person person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 public abstract Person SelectByName(string firstName, string lastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 public abstract int Insert (Person person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 [ActionName("SelectByKey")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 public abstract Person SelectByID (DbManager db, int id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public abstract Person SelectByName(DbManager db, Person person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public abstract Person SelectByName(DbManager db, string firstName, string lastName);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public abstract int Insert (DbManager db, Person person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 public readonly SprocQuery<Person> Query = new SprocQuery<Person>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 PersonAccessor pa = DataAccessor.CreateInstance<PersonAccessor>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 // Insert and get id.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 Person person = Person.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 person.FirstName = "Crazy";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 person.LastName = "Frog";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 person.Gender = Gender.Unknown;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 int id = pa.Insert(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 person = pa.SelectByID(id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 TypeAccessor.WriteConsole(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 Assert.IsNotNull(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 // Update.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 person.Gender = Gender.Other;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 pa.Query.Update(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 person = pa.SelectByID(person.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 TypeAccessor.WriteConsole(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 Assert.AreEqual(Gender.Other, person.Gender);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 // Delete.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 pa.Query.Delete(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 person = pa.SelectByID(person.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 Assert.IsNull(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 // Get All.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 List<Person> list = pa.Query.SelectAll();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 foreach (Person p in list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 TypeAccessor.WriteConsole(p);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 public void TransactionTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 using (DbManager db = new DbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 PersonAccessor pa = DataAccessor.CreateInstance<PersonAccessor>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 db.BeginTransaction();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 // Insert and get id.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 Person person = Person.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 person.FirstName = "Crazy";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 person.LastName = "Frog";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 person.Gender = Gender.Unknown;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 int id = pa.Insert(db, person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 person = pa.SelectByID(db, id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 TypeAccessor.WriteConsole(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 Assert.IsNotNull(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 // Update.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 person.Gender = Gender.Other;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 pa.Query.Update(db, person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 person = pa.SelectByID(db, person.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 TypeAccessor.WriteConsole(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 Assert.AreEqual(Gender.Other, person.Gender);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 // Delete.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 pa.Query.Delete(db, person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 person = pa.SelectByID(db, person.ID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Assert.IsNull(person);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 db.CommitTransaction();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 // Get All.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 List<Person> list = pa.Query.SelectAll(db);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 foreach (Person p in list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 TypeAccessor.WriteConsole(p);
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 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163