例子中4个对象的关系图如下 详细的生成方式可以查看官方的文档,本文选用了service
共包含7部分
1.通过住外键,唯一键查询
2.数据的添加
3.更新
4.保存(自动判断对象是否是新的)
5.DeepSave DeepLoad(主从表载入?)
6.事务
7.查询
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
using
MessageBoard.Entities;
//
命名空间 (实体)
5
using
MessageBoard.Data;
//
命名空间 (数据访问层)
6
7
8
namespace
MessageBoard.Services
9
{
10
11
public
class
Step01GetByKey
12
{
13
14
public
static
Users GetByPk(
int
userId)
15
{
16
return
DataRepository.UsersProvider.GetByID(userId);
//
如果表建立了主键 则自然会有此方法
17
}
18
19
public
static
TList
<
Opinions
>
GetByFK(
int
userId)
20
{
21
return
DataRepository.OpinionsProvider.GetByUserID(userId);
//
如果2个表建立了外键,自然会有外键查询的方法 返回的是TList
22
}
23
24
public
static
Users GetByIX(
string
userName)
25
{
26
return
DataRepository.UsersProvider.GetByName(userName);
//
如果表地某个字段建立了唯一键,也可以通过唯一键查询
27
}
28
29
}
30
31
public
class
Step02Add
32
{
33
34
public
static
void
Add(Users user)
35
{
36
DataRepository.UsersProvider.Insert(user);
//
添加一条
37
}
38
39
public
static
void
Add(TList
<
Users
>
user)
40
{
41
DataRepository.UsersProvider.Insert(user);
//
添加多条
42
}
43
44
}
45
46
public
class
Step03Update
47
{
48
49
public
static
void
Update(Users user)
50
{
51
DataRepository.UsersProvider.Update(user);
//
更新一条
52
}
53
54
public
static
void
Update(TList
<
Users
>
user)
55
{
56
DataRepository.UsersProvider.Update(user);
//
更新多条
57
}
58
59
}
60
public
class
Step04Save
61
{
62
63
public
static
void
Save()
64
{
65
Users u
=
new
Users();
66
u.Name
=
"
AAA
"
;
67
DataRepository.UsersProvider.Save(u);
//
自动调用add
68
69
u.Name
=
"
BBB
"
;
70
DataRepository.UsersProvider.Save(u);
//
调用update 通过isduty属性来判断是否是脏 isnew判断是否新
71
72
}
73
74
///
<summary>
75
///
查找跟当前对象有关联的子对象或父对象
76
///
</summary>
77
public
class
Step05Deep
78
{
79
80
public
static
void
DeepLoad(
string
name)
81
{
82
TList
<
Users
>
user
=
DataRepository.UsersProvider.GetAll();
//
查找全部
83
DataRepository.UsersProvider.DeepLoad(user,
false
, DeepLoadType.IncludeChildren,
typeof
(TList
<
Email
>
),
typeof
(TList
<
Opinions
>
),
typeof
(TList
<
Address
>
));
84
85
//
有11个重载 举一个最常用的, 第一个参数需要深度载入的对象,第二个是否递归,第三个参数选择载入类型(包含指定对象,忽略,不包含指定)这里是指定了需要载入的对象,后面是params type类型的参数,用于设置需要载入的类型 1对多用Tlist<类型> 多对1直接用类型
86
}
87
88
public
static
void
DeepSave(Users user,
params
Type[] childTypes)
//
保存对象及其子对象与deepload对应
89
{
90
DataRepository.UsersProvider.DeepSave(user, DeepSaveType.IncludeChildren, childTypes);
91
}
92
93
}
94
95
///
<summary>
96
///
事务
97
///
</summary>
98
public
class
Step06Trans
99
{
100
101
public
static
void
SendAnOpinion(Opinions opinion,
string
userName)
102
{
103
TransactionManager tm
=
DataRepository.Provider.CreateTransaction();
104
105
tm.BeginTransaction();
106
107
try
108
{
109
Users user
=
DataRepository.UsersProvider.GetByName(userName);
110
if
(user
==
null
)
111
{
112
user
=
new
Users();
113
user.Name
=
userName;
114
115
DataRepository.UsersProvider.Save(tm, user);
116
}
117
opinion.UserID
=
user.ID;
118
119
DataRepository.OpinionsProvider.Save(tm, opinion);
120
121
tm.Commit();
//
提交事务
122
}
123
catch
124
{
125
tm.Rollback();
//
回滚事务
126
throw
;
127
}
128
}
129
130
}
131
132
public
class
Step07Find
133
{
134
135
public
TList
<
Opinions
>
FindByDate(DateTime startDate, DateTime endDate,
int
userId)
136
{
137
SqlFilterBuilder
<
Opinions
>
sFB
=
new
SqlFilterBuilder
<
Opinions
>
();
138
139
sFB.AppendEquals(OpinionsColumn.UserID, userId);
140
141
sFB.AppendRange(OpinionsColumn.OpinionDate, startDate.ToString(), endDate.ToString());
142
143
return
DataRepository.OpinionsProvider.Find(sFB.ToString());
144
}
145
}
146
147
}
148
}
149
源代码等后面教程写完一起放出
即将推出
实体属性的扩展
NetTiers的实体数据源的使用
原地址链接: http://www.cnblogs.com/iCaca/archive/2007/04/20/685889.html