一、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. JVM内存回收机制

    1. JVM内存回收机制简述 http://www.cnblogs.com/lzrabbit/p/3826738.html

  2. js压缩、混淆和加密

    最近看到有些论坛在讨论js压缩.混淆和加密的问题,特意找了些资料看了下,现在总结一下: 1.关于三者的定义与区别 压缩:删除 Javascript 代码中所有注释.跳格符号.换行符号及无用的空格,从而 ...

  3. JXL获取excel批注

    /** * Jxl.jar(2.6.12) * @author lmiky * @date 2011-11-26 */ public class JxlTest { /** * 测试获取批注 * @a ...

  4. ExecutorService与Executors例子的简单剖析

    对于多线程有了一点了解之后,那么来看看java.lang.concurrent包下面的一些东西.在此之前,我们运行一个线程都是显式调用了Thread的start()方法.我们用concurrent下面 ...

  5. Ext入门学习系列(三)复杂自定义窗体

    通过前2节的学习,基本掌握了Ext的语法和运行原理,可以作出一些简单的应用.本节我们一起来完成复杂点的对话框操作,因为在实际项目中经常要用到确认对话框等多种操作,然后根据客户的选择作出不同的响应. 一 ...

  6. unix network programming(3rd)Vol.1 [第2~5章]《读书笔记系列》

    13~22章 重要 第2章 传输层: TCP/ UDP / STCP (Stream Control Transmission Protocol) TCP 可靠,有重传机制,SYN队列号 UDP 不可 ...

  7. [转] 三种Python下载url并保存文件的代码

    原文 三种Python下载url并保存文件的代码 利用程序自己编写下载文件挺有意思的. Python中最流行的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib ...

  8. HDU 3586-Information Disturbing(树形dp)

    题意: n个节点的通信连接树,切断每个边有一定的花费,要你切断边,在总花费不超过m的前提,使所有的其他节点都不能和节点1(根)连通,切边时有花费上限,让你最小化这个上限. 分析:最小化最大值,想到二分 ...

  9. setup.s

    INITSEG = 0x9000 ! we move boot here - out of the way ! 原来 bootsect 所处的段. ! ok, the read went well s ...

  10. C++空类以及没有成员变量的类的大小

    关于C++中空类的大小为1,我们大家都有所了解,但是除了空类之外的其他一些没有成员变量的类的大小,还是有很多不明之处的. 我们来看如下一个例子: #include<iostream> us ...