/
frmMain.cs
122 lines (119 loc) · 5.39 KB
/
frmMain.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using System;
using DevExpress.Xpo;
using DevExpress.XtraEditors;
using System.Collections.Generic;
namespace ExplicitUnitOfWorkDemo {
public partial class frmMain : XtraForm {
public frmMain() {
InitializeComponent();
}
private void btnRecreateAddress_Click(object sender, EventArgs e) {
ViewRecord row = gridView1.GetFocusedRow() as ViewRecord;
if(row == null) return;
long personOid = RecreateAddress(row);
UpdateRows();
gridView1.SetFocusedRowCellValue(colOid, personOid);
}
private static long RecreateAddress(ViewRecord selectedRow) {
long personOid;
using (ExplicitUnitOfWork explicitUnitOfWork = new ExplicitUnitOfWork(DatabaseHelper.DataLayer)) {
//Get selected person object.
Person person = explicitUnitOfWork.GetObjectByKey<Person>(selectedRow["Oid"]);
if(person == null || person.Address == null)
throw new ArgumentNullException("person");
//Remember person key value.
personOid = person.Oid;
Address address = person.Address;
long addressOid = address.Oid;
List<Person> referenceList = new List<Person>(address.Persons);
//Reset references to the Address object.
for (int i = 0; i < referenceList.Count; i++) {
referenceList[i].Address = null;
}
//Delete the Address object.
explicitUnitOfWork.Delete(address);
//Save changes to the database in case of an explicit transaction.
explicitUnitOfWork.FlushChanges();
//Create a new instance of the Address object.
address = DatabaseHelper.CreateNewAddress(explicitUnitOfWork, addressOid);
//Recover references to the Address object.
for (int i = 0; i < referenceList.Count; i++) {
referenceList[i].Address = address;
}
explicitUnitOfWork.CommitChanges();
}
return personOid;
}
private void btnCreatePerson_Click(object sender, EventArgs e) {
CreatePerson();
UpdateRows();
}
private static void CreatePerson() {
long personOid;
using (UnitOfWork uow = new UnitOfWork(DatabaseHelper.SequenceDataLayer)) {
Address address;
using (SequenceGenerator<Address> sg = new SequenceGenerator<Address>(DatabaseHelper.SequenceDataLayer)) {
address = DatabaseHelper.CreateNewAddress(uow, sg.GetNextId());
uow.CommitChanges();
sg.Accept();
}
using (SequenceGenerator<Person> sg = new SequenceGenerator<Person>(DatabaseHelper.SequenceDataLayer)) {
Person person = DatabaseHelper.CreateNewPerson(uow, sg.GetNextId());
personOid = person.Oid;
person.Address = address;
uow.CommitChanges();
sg.Accept();
}
}
}
private void btnCreatePersons_Click(object sender, EventArgs e) {
CreatePersons();
UpdateRows();
}
private static void CreatePersons() {
using (UnitOfWork uow = new UnitOfWork(DatabaseHelper.SequenceDataLayer)) {
List<Address> addressList = new List<Address>();
using (SequenceGenerator<Address> sg = new SequenceGenerator<Address>(DatabaseHelper.SequenceDataLayer)) {
for (int i = 0; i < 10; i++) {
Address address = DatabaseHelper.CreateNewAddress(uow, sg.GetNextId());
addressList.Add(address);
}
uow.CommitChanges();
sg.Accept();
}
using (SequenceGenerator<Person> sg = new SequenceGenerator<Person>(DatabaseHelper.SequenceDataLayer)) {
for (int i = 0; i < 10; i++) {
for (int k = 0; k < 10; k++) {
Person person = DatabaseHelper.CreateNewPerson(uow, sg.GetNextId());
person.Address = addressList[i];
}
}
uow.CommitChanges();
sg.Accept();
}
}
}
private void btnUpdate_Click(object sender, EventArgs e) {
UpdateRows();
}
private void UpdateRows() {
xpView1.TopReturnedRecords = (int)spinEdit1.Value;
xpView1.Reload();
}
private void btnClearDB_Click(object sender, EventArgs e) {
ClearDatabase();
UpdateRows();
}
private static void ClearDatabase() {
using (UnitOfWork uow = new UnitOfWork(DatabaseHelper.DataLayer)) {
XPCollection<Person> personList = new XPCollection<Person>(uow);
XPCollection<Address> addressList = new XPCollection<Address>(uow);
XPCollection<Sequence> sequencList = new XPCollection<Sequence>(uow);
uow.Delete(personList);
uow.Delete(addressList);
uow.Delete(sequencList);
uow.CommitChanges();
}
}
}
}