World Of ιζσεα.

The Dark Time Will Pass

 

NetTiers学习笔记01---调用Data层操作数据

例子中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的实体数据源的使用

posted on 2007-04-20 16:38  Ψιζσεα.  阅读(6511)  评论(26编辑  收藏  举报

导航