一、ORM入口封装

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

public  class DbService
{
/// <summary>
/// 默认业务数据库的Provider
/// </summary>
public static IDbProvider DefaultProvider
{
get
{
return new DbProvider().Init(new DbConnInfo()
{
CommandTimeout = ,
ConnectionString = "Data Source = 127.0.0.1;Initial Catalog =DapperData;uid=sa;pwd=sa123456;",
Provider = ProviderInfo.SqlServer,
DbKey = "DapperData"
});
}
}
} public class DbService<T> where T : class,new()
{
/// <summary>
/// 默认数据库的DAL
/// </summary>
public static IReqository<T> Reqository
{
get
{
return DbService.DefaultProvider.GetReqository<T>();
}
} /// <summary>
/// 主库指定类型的查询接口,是Linq的入口
/// </summary>
public static IQuery<T> Query
{
get
{
return DbService.DefaultProvider.GetQuery<T>();
}
}
}

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

  A、单表

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

  

  B、多表连个查询

var resultList = (from u in DbService<UserEntity>.Query
join ur in DbService<UserRoleEntity>.Query on new {u = u.UserId, a = u.IsActive} equals
new {u = ur.UserId, a = ur.IsActive}
join r in DbService<RoleEntity>.Query on ur.RoleId equals r.RoleId
where u.UserId ==
orderby u.UserId
select new UUR
{
UserId = u.UserId,
Username = u.Username,
PhoneNumber = u.PhoneNumber,
RoleName = r.RoleName
}).SetJoinMode(JoinMode.Inner, JoinMode.Inner).Page(,); var result = resultList.ToList().FirstOrDefault();

  C、分组查询

//select CICUser.UserId,
// MAX([CICUserScore].[score])
//from [CICUser] Join [CICUserScore] on [CICUser].[UserId] = [CICUserScore].[UserId]
//group by CICUser.UserId having (SUM(CICUserScore.score) > 200) var resultList = (from a in DbService<UserEntity>.Query
  join b in DbService<UserScoreEntity>.Query on a.UserId equals b.UserId
  group new {a, b} by new {a.UserId}
   into g
  where g.Sum(m=>m.b.score)>
  select new
 {
  userId= g.Key.UserId,
  TotalScore = g.Max(b => b.b.score)
 }).ToList();

  D、存储过程

 var dbParameters = new DbParameterCollection();

            dbParameters.Add(new DbParameter
{
DbType = DbType.Int32,
Name = "UserId",
Value =,
Direction = ParameterDirection.Input
}); var resultList = DbService.DbExtension.ExcuteProcReader<UserEntity>("GetUserData", dbParameters);

  E、事务

using (var dbprovider = DbService.DefaultProvider)
{
  try
  {
  dbprovider.Begin();   dbprovider.GetReqository<UserScoreEntity>().Insert(new UserScoreEntity
  {
  Id = Guid.NewGuid().ToString(),
  score = ,
  UserId =
  });   dbprovider.GetReqository<UserRoleEntity>().Insert(new UserRoleEntity
  {
  Id = ,
  UserId = ,
  RoleId = ,
  IsActive = false
  });   dbprovider.Commit();
  }
  catch (Exception)
  {
  dbprovider.Rollback();
  }
}

  F、执行Sql语句

var ds = DbService.DbExtension.ExcuteQuery("select * from dbo.CICUser");

foreach (DataRow row in ds.Tables[].Rows)
{
  Console.WriteLine(row[]);
}

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. Java之获取系统属性

    import java.util.Enumeration; import java.util.Properties; public class Example609 { public static v ...

  2. UVa 1643 Angle and Squares

    题意: 如图,有n个正方形和一个角(均在第一象限中),使这些正方形与这个角构成封闭的阴影区域,求阴影区域面积的最大值. 分析: 直观上来看,当这n个正方形的对角线在一条直线上时,封闭区域的面积最大.( ...

  3. ZOJ 2760 How Many Shortest Path (不相交的最短路径个数)

    [题意]给定一个N(N<=100)个节点的有向图,求不相交的最短路径个数(两条路径没有公共边). [思路]先用Floyd求出最短路,把最短路上的边加到网络流中,这样就保证了从s->t的一个 ...

  4. android捕获ListView中每个item点击事件

    转自:http://www.cnblogs.com/pswzone/archive/2012/03/10/2389275.html package com.wps.android;   import  ...

  5. 一个可能是pip的一个BUG

    今天重新安装了Python,把Python的安装位置改为 D:\Program Files\Python\Python34\ 用pip 安装 Django 的时候出现一下错误 >pip inst ...

  6. 淘宝JAVA中间件Diamond详解(一)---简介&快速使用

    大家好,今天开始为大家带来我们通用产品团队的产品 —— diamond的专题,本次为大家介绍diamond的概况和快速使用. 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是 ...

  7. tap/click on search button on softkeyboard

    driver.sendKeyEvent(84);Appium says it successfully sent in the command but 'search' does not get ta ...

  8. Jquery UI的datepicker插件使用方法

    原文链接;http://www.ido321.com/375.html Jquery UI是一个非常丰富的Jquery插件,并且UI的各部分插件可以独自分离出来使用,这是其他很多Jquery插件没有的 ...

  9. NOIP2006 2k进制数

    2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换 ...

  10. HDU-4614 Vases and Flowers 线段树区间更新

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 线段树保存区间是否被覆盖以及区间的和即可,在询问的时候在线段树上二分查找就可以了...代码写得比 ...