巧用泛型,让所有的数据表操作类都具有增,删,改(LinQ)

本人第一篇文章,个人主要用的是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,作用为所有数据表操作类的接口的接口。代码如下:

ContractedBlock.gif ExpandedBlockStart.gif 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接口,实现三个方法,如下:

ContractedBlock.gif ExpandedBlockStart.gif 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();

这样就可以实现所有的数据表操作类都具有增,删,改都功能了,只要实现上面的接口和类就可以了。。。

本人对设计不太熟悉,错误请大家多多指教。。。

转载于:https://www.cnblogs.com/floyd/archive/2009/03/13/1410274.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值