| shuai's profile娱乐精神PhotosBlog | Help |
|
9/23/2008 基于Linq的通用业务层最近研究了一下Linq 做了一个通用业务层 本人把数据访问层去掉了 首先因为我的目标是快速开发 不考虑性能和功能性 另外Linq在我眼中就是数据访问层 --在业务层写直接Linq已经足够简单单清晰 先看一下怎么使用 实现三层结构,只需要两步,只需写一行代码 1。用CodeSmith,或SqlMetal,或VS O/R Designer根据数据结构生成实体类 生成内容例如: [Table(Name = "ApplicationForm")] public partial class ApplicationForm { [Column(Name = "Id", IsPrimaryKey = true, IsDbGenerated = true)] public int Id { get; set; } [Column(Name = "Name")] public string Name { get; set; } } 2。业务层继承我的Service<>泛型类 形如: public class ApplicationFormService : Service<ApplicationForm> { } 就这么简单 Service<>的子类将提供了常用的CRUD,Count,Exist操作 并支持较复杂的强类型的查询条件 功能举例 1。查询(强类型的查询条件) //按ID返回单个对象 ApplicationForm list6 = ApplicationFormService.FindById(10); //返回单个对象。强类型的查询条件 ApplicationForm list5 = ApplicationFormService.Find(p => p.IsInMarket == true && p.Course == 0); //返回多个对象,单个条件 List<ApplicationForm> list1 = ApplicationFormService.FindAll(p => p.Id == 1); //返回多个对象,多个条件 List<ApplicationForm> list2 = ApplicationFormService.FindAll(p => p.IsInMarket == true && p.Course == 0); //拼装查询条件 Criteria<ApplicationForm> criteria3 = new Criteria<ApplicationForm>(); criteria3.And(p => p.IsInMarket == true); if (couse != "") criteria3.And(p => p.Course == 0); //查询条件 criteria3.LimitNumber = 2; //返回个数 criteria4.AddOrderBy(p => p.Course); //排序 criteria4.AddOrderByDescending(p => p.Id); //第二排序字段降序 List<ApplicationForm> list4 = ApplicationFormService.FindAll(criteria4); //分页 int totalCount; List<ApplicationForm> list7 = ApplicationFormService.FindAll(0, 5, out totalCount); //0表示startIndex List<ApplicationForm> list8 = ApplicationFormService.FindAll(p => p.IsInMarket == true, 5, 5, out totalCount); 2。创建 ApplicationForm entity = new ApplicationForm(); entity.Name = ""; ApplicationFormService.Create(entity); 3。更新 在这里Linq有个让我不爽的地方,就是不能指定只针对某一个对象更新 entity.Name = "abc"; ApplicationFormService.Update(); 4。删除 ApplicationFormService.DeleteById(100); ApplicationFormService.Delete(x => x.Id == 100 && x.Name == "abc"); 5。Count 和 Exist ApplicationFormService.Count(); ApplicationFormService.Count(x => x.Name == "abc"); bool isExist = ApplicationFormService.Exist(x => x.Id == 100 && x.Name == "abc"); 当然如果对Service<>产生的方法不满意你也可以重写这些方法 Service<>内部提供了DataContext,可以处理对数据库的操作 为了增加扩展性Service<>类提供了几个版本 Service<TEntity, TIdentiry, TOrderKeySelector> TEntity表示实体类型 TIdentiry表示主键类型 TOrderKeySelector表示自定义默认排序字段 好了先写到这里 下一篇我将写一个处理对象关联情况的文章 |
|
|