一、ORM入口封装

  结合上一篇文章与这里的DbProvider().Init()方法,就很明显的知道了是创建一个mssql的实例。那么在DbService的泛型方法中显示提供了单表操作与多表linq查询的入口,其实还存在获取数据库扩展操作的入口。

  1. public class DbService
  2. {
  3. /// <summary>
  4. /// 默认业务数据库的Provider
  5. /// </summary>
  6. public static IDbProvider DefaultProvider
  7. {
  8. get
  9. {
  10. return new DbProvider().Init(new DbConnInfo()
  11. {
  12. CommandTimeout = ,
  13. ConnectionString = "Data Source = 127.0.0.1;Initial Catalog =DapperData;uid=sa;pwd=sa123456;",
  14. Provider = ProviderInfo.SqlServer,
  15. DbKey = "DapperData"
  16. });
  17. }
  18. }
  19. }
  20.  
  21. public class DbService<T> where T : class,new()
  22. {
  23. /// <summary>
  24. /// 默认数据库的DAL
  25. /// </summary>
  26. public static IReqository<T> Reqository
  27. {
  28. get
  29. {
  30. return DbService.DefaultProvider.GetReqository<T>();
  31. }
  32. }
  33.  
  34. /// <summary>
  35. /// 主库指定类型的查询接口,是Linq的入口
  36. /// </summary>
  37. public static IQuery<T> Query
  38. {
  39. get
  40. {
  41. return DbService.DefaultProvider.GetQuery<T>();
  42. }
  43. }
  44. }

二、单表、多表、扩展示例

  A、单表

  1. DbService<UserEntity>.Reqository.Single(w => w.Email.Contains("@"));
  2. DbService<UserEntity>.Reqository.Insert(new UserEntity(){});
  3. DbService<UserEntity>.Reqository.Update(up => new UserEntity{Email = "taibai@xingguangju.com"}, wh => wh.UserId == );
  4. DbService<UserRoleEntity>.Reqository.Delete(w => w.Id == );

  

  B、多表连个查询

  1. var resultList = (from u in DbService<UserEntity>.Query
  2. join ur in DbService<UserRoleEntity>.Query on new {u = u.UserId, a = u.IsActive} equals
  3. new {u = ur.UserId, a = ur.IsActive}
  4. join r in DbService<RoleEntity>.Query on ur.RoleId equals r.RoleId
  5. where u.UserId ==
  6. orderby u.UserId
  7. select new UUR
  8. {
  9. UserId = u.UserId,
  10. Username = u.Username,
  11. PhoneNumber = u.PhoneNumber,
  12. RoleName = r.RoleName
  13. }).SetJoinMode(JoinMode.Inner, JoinMode.Inner).Page(,);
  14.  
  15. var result = resultList.ToList().FirstOrDefault();

  C、分组查询

  1. //select CICUser.UserId,
  2. // MAX([CICUserScore].[score])
  3. //from [CICUser] Join [CICUserScore] on [CICUser].[UserId] = [CICUserScore].[UserId]
  4. //group by CICUser.UserId having (SUM(CICUserScore.score) > 200)
  5.  
  6. var resultList = (from a in DbService<UserEntity>.Query
  7.   join b in DbService<UserScoreEntity>.Query on a.UserId equals b.UserId
  8.   group new {a, b} by new {a.UserId}
  9.    into g
  10.   where g.Sum(m=>m.b.score)>
  11.   select new
  12.  {
  13.   userId= g.Key.UserId,
  14.   TotalScore = g.Max(b => b.b.score)
  15.  }).ToList();

  D、存储过程

  1. var dbParameters = new DbParameterCollection();
  2.  
  3. dbParameters.Add(new DbParameter
  4. {
  5. DbType = DbType.Int32,
  6. Name = "UserId",
  7. Value =,
  8. Direction = ParameterDirection.Input
  9. });
  10.  
  11. var resultList = DbService.DbExtension.ExcuteProcReader<UserEntity>("GetUserData", dbParameters);

  E、事务

  1. using (var dbprovider = DbService.DefaultProvider)
  2. {
  3.   try
  4.   {
  5.   dbprovider.Begin();
  6.  
  7.   dbprovider.GetReqository<UserScoreEntity>().Insert(new UserScoreEntity
  8.   {
  9.   Id = Guid.NewGuid().ToString(),
  10.   score = ,
  11.   UserId =
  12.   });
  13.  
  14.   dbprovider.GetReqository<UserRoleEntity>().Insert(new UserRoleEntity
  15.   {
  16.   Id = ,
  17.   UserId = ,
  18.   RoleId = ,
  19.   IsActive = false
  20.   });
  21.  
  22.   dbprovider.Commit();
  23.   }
  24.   catch (Exception)
  25.   {
  26.   dbprovider.Rollback();
  27.   }
  28. }

  F、执行Sql语句

  1. var ds = DbService.DbExtension.ExcuteQuery("select * from dbo.CICUser");
  2.  
  3. foreach (DataRow row in ds.Tables[].Rows)
  4. {
  5.   Console.WriteLine(row[]);
  6. }

ORM之四:调用入口与调用示例的更多相关文章

  1. [转]如何利用ndk-stack工具查看so库的调用堆栈【代码示例】?

    如何利用ndk-stack工具查看so库的调用堆栈[代码示例]? http://hi.baidu.com/subo4110/item/d00395b3bf63e4432bebe36d Step1:An ...

  2. [置顶] Xamarin android如何调用百度地图入门示例(一)

    在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...

  3. VB.NET中的DLL编写和调用的最简单示例

    DLL(动态链接库)是一个很有用的东西,在开发大项目的时候显得非常重要,因为多人合作开发时,可以给每个人分配一个任务,用DLL完成,最后组合起来,就不会出现互相冲突的问题.这里给出最简单的DLL编写与 ...

  4. C# 委托的三种调用示例(同步调用、异步调用、异步回调)

    首先,通过代码定义一个委托和下面三个示例将要调用的方法: 代码如下: public delegate int AddHandler(int a,int b); public class 加法类 { p ...

  5. 【C#】 创建、部署和调用WebService的简单示例

    C# 创建.部署和调用WebService的简单示例 <div class="postBody"> <div id="cnblogs_post_body ...

  6. C# 创建、部署和调用WebService的简单示例 (转)

    C# 创建.部署和调用WebService的简单示例(转)  转自 https://www.cnblogs.com/Brambling/p/7266482.html  webservice 可以用于分 ...

  7. Delphi 类库(DLL)动态调用与静态调用示例讲解

    在Delphi或者其它程序中我们经常需要调用别人写好的DLL类库,下面直接上示例代码演示如何进行动态和静态的调用方法: { ************************************** ...

  8. SharePoint 2013 调用WCF服务简单示例

    内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...

  9. Dubbo远程调用服务框架原理与示例

    Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架 ...

随机推荐

  1. Android开发框架之xUtils学习

    1.一个非作者弄的xUtils API文档: http://xutilsapi.oschina.mopaas.com/overview-summary.html 2.使用xUtils用户的一些博客文档 ...

  2. sublime打开文件时自动生成并打开.dump文件

    GBK Encoding Support 没有安装前打开ASNI格式编码文件会乱码,安装成功重启则可以打开正常 关于.dump文件生成的解释: 当打开一个非utf-8格式且包含汉字的文件时,subli ...

  3. 武汉北大青鸟解读2016年10大IT热门岗位

    武汉北大青鸟解读2016年10大IT热门岗位 2016年1月5日 13:37 北大青鸟 这是IT从业者的辉煌时代,IT行业的失业率正处在历史的低点,而且有的岗位——例如网络和安全工程师以及软件开发人员 ...

  4. 函数fsp_alloc_seg_inode_page

    分配一个新的inode page /**********************************************************************//** Allocat ...

  5. unity3d游戏物体跟着鼠标方向移动

    效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样. 思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动. 如果你看到这的 ...

  6. Windows如何安装自定义服务

    系统:Windows8 开发环境:Visual Studio 2012 开发平台 .Net Framework 4.5 找到系统盘的 C:\Windows\Microsoft.NET\Framewor ...

  7. [swustoj 1095] 挖金子

    挖金子(1095) 题目描述 你在一个N*M的区域中,一开始在(1,1)的位置,每个位置有可能有金子,也有可能不能到达,也有可能有传送门.你只能往右或者下走,不能走出这个区域.当你位于传送门时,传送门 ...

  8. LeetCode Lowest Common Ancestor of a Binary Search Tree (LCA最近公共祖先)

    题意: 给一棵二叉排序树,找p和q的LCA. 思路: 给的是BST(无相同节点),那么每个节点肯定大于左子树中的最大,小于右子树种的最小.根据这个特性,找LCA就简单多了. 分三种情况: (1)p和q ...

  9. MYSQL使用二进制日志来恢复数据

    mysqlbinlog工具的使用,大家可以看MySQL的帮助手册.里面有详细的用, 在这个例子中,重点是--start-position参数和--stop-position参数的使用. ·--star ...

  10. 转换Json格式帮助类

    using System; using System.Collections.Generic; using System.Text; using System.Reflection; using Sy ...