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: 网络通信框架 ...
随机推荐
- sizeof(数组)
这里就不讨论一般的数组长度计算了,只说明一下任何数据到了函数的形参中都将退化为指针,所以计算大小的时候,也是计算的指针的大小 直接上代码了 // class sizeof测试.cpp : 定义控制台应 ...
- Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)
一.官网的说明 http://download.oracle.com/docs/cd/E11882_01/server.112/e26088/functions088.htm#SQLRF00658 P ...
- C语言中的位拷贝与值拷贝浅谈(转载)
注:C语言实现的PHP变量的赋值过程中,就涉及到了 深拷贝和浅拷贝 位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(深拷贝).深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象 ...
- Anti-pattern(反面模式)
转自维基百科 http://zh.wikipedia.org/wiki/%E5%8F%8D%E9%9D%A2%E6%A8%A1%E5%BC%8F 在软件工程中,一个反面模式(anti-pattern或 ...
- 初探数位dp
数位dp有着很明显的特点,一般来说是给定区间[l,r]求满足某种条件区间中的数有多少个 朴素解法一般是O(n)的而n往往很大(10^8起步) 这时候我们就要想办法优化,于是就有了数位dp 数位有两个基 ...
- OWIN katana注册中间件的几种写法
首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...
- ubuntuy用户切换和密码修改
修改当前用户的密码 $passwd 修改用户密码 $sudo passwd 用户名 切换到其他帐号(需要该用户的密码) $su 用户名 切换到root帐号 $sudo -s
- jQuery.Validate验证库
一.用前必备官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ API: http://jquery.bassist ...
- Jquery AutoComplete的使用方法实例
jquery.autocomplete详解 语法: autocomplete(urlor data, [options] ) 参数: url or data:数组或者url [options]:可选项 ...
- C#实现无物理边距真正可打印区域的绘图\打印程序开发
经常在开发实际的应用程序中,需要用到图形绘制和打印程序.如何实现完整的精确打印和绘图是需要注意许多细节地方的.最近在遇到打印问题的时候,仔细研究一阵,总结这篇博文,写得有点杂乱,看文要还请费点神. 基 ...