ORM之四:调用入口与调用示例
一、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之四:调用入口与调用示例的更多相关文章
- [转]如何利用ndk-stack工具查看so库的调用堆栈【代码示例】?
如何利用ndk-stack工具查看so库的调用堆栈[代码示例]? http://hi.baidu.com/subo4110/item/d00395b3bf63e4432bebe36d Step1:An ...
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
- VB.NET中的DLL编写和调用的最简单示例
DLL(动态链接库)是一个很有用的东西,在开发大项目的时候显得非常重要,因为多人合作开发时,可以给每个人分配一个任务,用DLL完成,最后组合起来,就不会出现互相冲突的问题.这里给出最简单的DLL编写与 ...
- C# 委托的三种调用示例(同步调用、异步调用、异步回调)
首先,通过代码定义一个委托和下面三个示例将要调用的方法: 代码如下: public delegate int AddHandler(int a,int b); public class 加法类 { p ...
- 【C#】 创建、部署和调用WebService的简单示例
C# 创建.部署和调用WebService的简单示例 <div class="postBody"> <div id="cnblogs_post_body ...
- C# 创建、部署和调用WebService的简单示例 (转)
C# 创建.部署和调用WebService的简单示例(转) 转自 https://www.cnblogs.com/Brambling/p/7266482.html webservice 可以用于分 ...
- Delphi 类库(DLL)动态调用与静态调用示例讲解
在Delphi或者其它程序中我们经常需要调用别人写好的DLL类库,下面直接上示例代码演示如何进行动态和静态的调用方法: { ************************************** ...
- SharePoint 2013 调用WCF服务简单示例
内容比较简单,主要记录自己使用SharePoint 2013WCF服务遇到的小问题和小经验,分享给大家,希望能够给需要的人有所帮助.好吧,进入正题! 第一部分 SharePoint 2013调用自带W ...
- Dubbo远程调用服务框架原理与示例
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架 ...
随机推荐
- Android开发框架之xUtils学习
1.一个非作者弄的xUtils API文档: http://xutilsapi.oschina.mopaas.com/overview-summary.html 2.使用xUtils用户的一些博客文档 ...
- sublime打开文件时自动生成并打开.dump文件
GBK Encoding Support 没有安装前打开ASNI格式编码文件会乱码,安装成功重启则可以打开正常 关于.dump文件生成的解释: 当打开一个非utf-8格式且包含汉字的文件时,subli ...
- 武汉北大青鸟解读2016年10大IT热门岗位
武汉北大青鸟解读2016年10大IT热门岗位 2016年1月5日 13:37 北大青鸟 这是IT从业者的辉煌时代,IT行业的失业率正处在历史的低点,而且有的岗位——例如网络和安全工程师以及软件开发人员 ...
- 函数fsp_alloc_seg_inode_page
分配一个新的inode page /**********************************************************************//** Allocat ...
- unity3d游戏物体跟着鼠标方向移动
效果:当点击鼠标左键时,游戏对象会朝鼠标点击的方向移动,类似魔兽争霸一样. 思路:把鼠标的坐标转化成世界坐标(鼠标默认是屏幕坐标),然后当点击鼠标时,物体将朝着鼠标的世界坐标方向移动. 如果你看到这的 ...
- Windows如何安装自定义服务
系统:Windows8 开发环境:Visual Studio 2012 开发平台 .Net Framework 4.5 找到系统盘的 C:\Windows\Microsoft.NET\Framewor ...
- [swustoj 1095] 挖金子
挖金子(1095) 题目描述 你在一个N*M的区域中,一开始在(1,1)的位置,每个位置有可能有金子,也有可能不能到达,也有可能有传送门.你只能往右或者下走,不能走出这个区域.当你位于传送门时,传送门 ...
- LeetCode Lowest Common Ancestor of a Binary Search Tree (LCA最近公共祖先)
题意: 给一棵二叉排序树,找p和q的LCA. 思路: 给的是BST(无相同节点),那么每个节点肯定大于左子树中的最大,小于右子树种的最小.根据这个特性,找LCA就简单多了. 分三种情况: (1)p和q ...
- MYSQL使用二进制日志来恢复数据
mysqlbinlog工具的使用,大家可以看MySQL的帮助手册.里面有详细的用, 在这个例子中,重点是--start-position参数和--stop-position参数的使用. ·--star ...
- 转换Json格式帮助类
using System; using System.Collections.Generic; using System.Text; using System.Reflection; using Sy ...