一、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. Oracle > count(*) / count(0) / count(1) | order by 1, 2

    select count(*), select count(0), select count(1) from table 在统计表的行数时候,经常用到 select count(*) 然而对于行数很多 ...

  2. HTML5学习(五)----SVG

    参考教程地址:http://www.w3school.com.cn/html5/html_5_svg.asp HTML5 支持内联 SVG. 什么是SVG? SVG 指可伸缩矢量图形 (Scalabl ...

  3. [原]Unity3D深入浅出 - 认识开发环境中的Project面板

      前面几个是用来创建脚步的,从Prefab说起: Prefab:预设物体,若一个Object在Scene中多处用到,即可选择为改对象创建一个Prefab.创建一个Prefab后,将源Object拖拽 ...

  4. WP8触摸感应Manipulation的操作

    触控感应不同事件的处理: 可将以下三个事件,绑定到一个控件中. /// <summary> /// 触摸开始事件 /// </summary> /// <param na ...

  5. TreeList 实现多表头

    1. 先上图: 2. 再上代码: 原码

  6. Terrocotta - 基于JVM的Java应用集群解决方案

    前言 越来越多的企业关键应用都必须采用集群技术,实现负载均衡(Load Balancing).容错(Fault Tolerance)和灾难恢复(Failover).以达到系统可用性(High Avai ...

  7. Java 7 Fork/Join 并行计算框架概览

    应用程序并行计算遇到的问题 当硬件处理能力不能按摩尔定律垂直发展的时候,选择了水平发展.多核处理器已广泛应用,未来处理器的核心数将进一步发布,甚至达到上百上千的数量.而现在 很多的应用程序在运行在多核 ...

  8. 安装ejabberd2并配置MySQL为其数据库

    以前用过openfire做为服务器,但是openfire的集群支持不是很好,所以改用Ejabberd,由于它是用Erlang语言开发的,其并发率与分布式的功能都是很强悍的,在此我记录一下我的安装与配置 ...

  9. Ildasm.exe(MSIL 反汇编程序)

    MSIL 反汇编程序是 MSIL 汇编程序 (Ilasm.exe) 的伙伴工具. Ildasm.exe 采用包含 Microsoft 中间语言 (MSIL) 代码的可迁移可执行 (PE) 文件,并创建 ...

  10. 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作

    Java栈和局部变量操作 Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关.栈操作包括把常量压入操作数栈.执行通用的栈操作.在操作数栈和局部变量之间往返传输值. 1常量入栈操 ...