例子中4个对象的关系图如下 详细的生成方式可以查看官方的文档,本文选用了service
共包含7部分
1.通过住外键,唯一键查询
2.数据的添加
3.更新
4.保存(自动判断对象是否是新的)
5.DeepSave DeepLoad(主从表载入?)
6.事务
7.查询
源代码等后面教程写完一起放出
即将推出
实体属性的扩展
NetTiers的实体数据源的使用
原地址链接: http://www.cnblogs.com/iCaca/archive/2007/04/20/685889.html
共包含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
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