本人第一篇文章,个人主要用的是Asp.net Mvc框架 + LinQ来开发的。
下面的内容涉及到LinQ的知识和泛型,如果没有了解过的话,请先在博客园搜索一下相关资料,本人在这里就不多介绍了。
假设数据库中有张表为User表。(以下为Demo)
建一个LinQ to SQL类,名为TestData.dbml,然后将数据表User拖拉进去。(具体步骤省略)
添加一新类,名为TableModel,内容为空。展开TestData.dbml,打开TestData.designer.cs文件,在类Uesr中添加继承TableModel。(为什么要这样做,稍后解释)
还要为User类中的每的字段添加UpdateCheck = UpdateCheck.Never这句,否则会更新失败的。
添加一新接口,名为IBaseRepository,作用为所有数据表操作类的接口的接口。代码如下:
Code
1 public interface IBaseRepository<T> where T:TableModel
2 {
3 /// <summary>
4 /// 增
5 /// </summary>
6 /// <param name="obj"></param>
7 void Insert(T obj);
8
9 /// <summary>
10 /// 改
11 /// </summary>
12 /// <param name="obj"></param>
13 void Update(T obj);
14
15 /// <summary>
16 /// 删
17 /// </summary>
18 /// <param name="obj"></param>
19 void Delete(T obj);
20 }
where T:TableModel,可能有些人不知道是什么意思来的。。。限定泛型T为TableModel类,因为使用LinQ的泛型的话,泛型必须为引用型,所有为什么前面的User类要继承TableModel。
添加一新类,继承IBaseRepository接口,实现三个方法,如下:
Code
1 public void Insert(T obj)
2 {
3 using (TestDataDataContext t = new TestDataDataContext())
4 {
5 t.GetTable<T>().InsertOnSubmit(obj);
6 t.SubmitChanges();
7 }
8 }
9
10 public void Update(T obj)
11 {
12 using (TestDataDataContext t = new TestDataDataContext())
13 {
14 t.GetTable<T>().Attach(obj, true);
15 t.SubmitChanges();
16 }
17 }
18
19 public void Delete(T obj)
20 {
21 using (TestDataDataContext t = new TestDataDataContext())
22 {
23 t.GetTable<T>().Attach(obj, true);
24 t.GetTable<T>().DeleteOnSubmit(obj);
25 t.SubmitChanges();
26 }
27 }
代码是什么意思,了解过linQ的都知道了,就不解释了。
新建接口名为IUserRepository,对User操作的,实现 IBaseRepository<User>
新建实现类为UserRepository,实现 BaseRepository<User>,IUserRepository
调用为:
IUserRepository userRe = new UserRepository();
这样就可以实现所有的数据表操作类都具有增,删,改都功能了,只要实现上面的接口和类就可以了。。。
本人对设计不太熟悉,错误请大家多多指教。。。