Dapper 学习笔记
USE [FactoryDeal]
GO /****** Object: Table [dbo].[User] Script Date: 06/12/2015 10:57:18 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(,) NOT NULL,
[LoginNo] [nvarchar]() NOT NULL,
[PassWord] [nvarchar]() NOT NULL,
[PassPort] [nvarchar]() NULL,
[Type] [tinyint] NULL,
[FactoryId] [int] NULL,
[RoleId] [int] NULL,
[TrueName] [nvarchar]() NULL,
[NickName] [nvarchar]() NULL,
[Gender] [tinyint] NULL,
[Company] [nvarchar]() NULL,
[Dept] [nvarchar]() NULL,
[SelfCellphone] [nvarchar]() NULL,
[SelfTellphone] [nvarchar]() NULL,
[Duty] [nvarchar]() NULL,
[Address] [nvarchar]() NULL,
[Legal] [nvarchar]() NULL,
[LinkMan] [nvarchar]() NULL,
[Cellphone] [nvarchar]() NULL,
[Tellphone] [nvarchar]() NULL,
[Fax] [nvarchar]() NULL,
[PostCode] [nvarchar]() NULL,
[Email] [nvarchar]() NULL,
[QQ] [nvarchar]() NULL,
[BusinessImgPath] [nvarchar]() NULL,
[TaxRegImgPath] [nvarchar]() NULL,
[OrgImgPath] [nvarchar]() NULL,
[AuthNo] [nvarchar]() NULL,
[ifAuth] [bit] NULL,
[CreateTime] [datetime] NULL,
[EditeTime] [datetime] NULL,
[EditeMan] [nvarchar]() NULL,
[Status] [tinyint] NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO USE [FactoryDeal]
GO /****** Object: Table [dbo].[User_Module] Script Date: 06/12/2015 11:00:51 ******/
SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[User_Module](
[UserId] [int] NOT NULL,
[ModuleId] [int] NOT NULL,
CONSTRAINT [PK_User_Module] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[ModuleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO USE [FactoryDeal]
GO
/****** Object: StoredProcedure [dbo].[usp_insertChatRecord] Script Date: 06/12/2015 11:01:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create proc [dbo].[usp_insertChatRecord]
@FromLoginNo [nchar](),
@ToLoginNo [nvarchar](),
@Type [tinyint],
@Message [text],
@SendTime [datetime],
@Status [tinyint]
as
declare @nowYear nvarchar()
declare @sqlstr nvarchar()
set @nowYear=CAST(DATEPART(year,GETDATE()) as nvarchar())
begin if (not exists(select object_id from sys.tables where name='ChatRecord_'+@nowYear))
begin
set @sqlstr= 'CREATE TABLE ChatRecord_'+@nowYear+'(
[Id] [int] IDENTITY(,) NOT NULL,
[FromLoginNo] [nchar]() NOT NULL,
[ToLoginNo] [nvarchar]() NOT NULL,
[Type] [tinyint] NULL),
[Message] [text] NULL,
[SendTime] [datetime] NULL,
[Status] [tinyint] NULL) go'
exec sp_executesql @sqlstr
end ---动态插入数据
set @sqlstr='INSERT INTO ChatRecord_'+@nowYear+'
([FromLoginNo]
,[ToLoginNo]
,[Type]
,[Message]
,[SendTime]
,[Status])
VALUES(@FromLoginNo,@ToLoginNo,@Type,@Message ,@SendTime,@Status)'
exec sp_executesql @sqlstr ,N'@FromLoginNo nchar(32),@ToLoginNo [nvarchar](32),@Type [tinyint],@Message [text],@SendTime [datetime],@Status [tinyint]',
@FromLoginNo,@ToLoginNo,@Type,@Message,@SendTime,@Status end
2.实体类
public class User
{
public virtual int Id { get; set; }
public virtual string Loginno { get; set; }
public virtual string Password { get; set; }
public virtual string Passport { get; set; }
public virtual byte? Type { get; set; }
public virtual int? Factoryid { get; set; }
public virtual int? Roleid { get; set; }
public virtual string Truename { get; set; }
public virtual string Nickname { get; set; }
public virtual byte? Gender { get; set; }
public virtual string Company { get; set; }
public virtual string Dept { get; set; }
public virtual string Selfcellphone { get; set; }
public virtual string Selftellphone { get; set; }
public virtual string Duty { get; set; }
public virtual string Address { get; set; }
public virtual string Legal { get; set; }
public virtual string Linkman { get; set; }
public virtual string Cellphone { get; set; }
public virtual string Tellphone { get; set; }
public virtual string Fax { get; set; }
public virtual string Postcode { get; set; }
public virtual string Email { get; set; }
public virtual string Qq { get; set; }
public virtual string Businessimgpath { get; set; }
public virtual string Taxregimgpath { get; set; }
public virtual string Orgimgpath { get; set; }
public virtual string Authno { get; set; }
public virtual bool? Ifauth { get; set; }
public virtual DateTime? Createtime { get; set; }
public virtual DateTime? Editetime { get; set; }
public virtual string Editeman { get; set; }
// public virtual byte? Status { get; set; } public int MyProperty { get; set; } public IList<UserModule> Modules { get; set; }
} public class UserModule
{
public virtual int Userid { get; set; }
public virtual int Moduleid { get; set; } public User User { get; set; }
} public class ChatRecord
{
public virtual string Fromloginno { get; set; }
public virtual string Tologinno { get; set; }
public virtual byte? Type { get; set; }
public virtual string Message { get; set; }
public virtual DateTime? Sendtime { get; set; }
public virtual byte? Status { get; set; }
}
3.Dapper方法
private IList<User> GetAll()
{
string sql = "select * from [user]"; return conn.Query<User>(sql).ToList();
} private User GetSingleById(int id)
{
string sql = "select * from [user] where id=@id"; return conn.Query<User>(sql, param: new {id=id}).FirstOrDefault();
//param 必须是对象项属性 param:id 不正确
} private User Add(User user)
{
string sql = "insert into [user](loginNo,password) OUTPUT inserted.Id values(@loginNo,@password)";
user.Id=(int)conn.ExecuteScalar(sql, user); return user;
}
private bool Update(User user)
{
string sql = "update [user] set loginNo=@loginNo where id=@id"; return conn.Execute(sql, user)>=;
} private bool Delete(int id)
{
string sql = "delete from [user] where id=@id"; return conn.Execute(sql, new { id = id })>=;
} //1-N
private IList<User> GetAllUserWithModules()
{
string sql = "select * from [user] as a left join User_Module as b on a.Id=b.UserId"; //保证join UserModule条数
User user = null; //异常 When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id
//必须添加 splitOn 同时查询字段必须包括外键 b.UserId
return conn.Query<User,UserModule, User>(sql, (u, m) => { if (user==null||user.Id!=u.Id)
{
user = u;
} if (m != null)
{
if (user.Modules==null)
{
user.Modules = new List<UserModule>();
}
user.Modules.Add(m);
} return user;
},splitOn:"Id,UserId").Distinct().ToList(); } //1*1
private IList<UserModule> GetAllModuleWithUser()
{
//inner join
string sql = "select * from User_Module a left join [User] b on a.UserId=b.Id "; return conn.Query<UserModule, User, UserModule>(sql,(m, u) =>
{
m.User = u;
return m; },"UserId,Id").ToList();
} //事务
private bool DeleteUserWithModule(int id)
{
string sql1 = "delete from [User] where id=@id";
string sql2 = "delete from User_Module where userId=@userId"; using (conn)
{
conn.Open(); using (var transaction = conn.BeginTransaction())
{
try
{
//Query必须添加 transaction:transaction
conn.Execute(sql1, new { id = id},transaction:transaction);
conn.Execute(sql2, new { userId = id },transaction:transaction);
transaction.Commit(); return true;
}
catch (Exception)
{
transaction.Rollback(); return false;
}
}
}
} private bool AdddChatRecord(ChatRecord chatRecord)
{
conn.Execute("usp_insertChatRecord", param: chatRecord,commandType:System.Data.CommandType.StoredProcedure); return true;
}
三、总结
个人感觉dapper 在处理join实体转换,尤其是1对多方面处理起来比麻烦。有什么好的实现方式,还请各位大虾指点....
Dapper 学习笔记的更多相关文章
- Dapper学习笔记(1)-开始
Dapper是一款开源的轻量级ORM工具,源代码下载地址为https://github.com/StackExchange/dapper-dot-net,其具有以下特点: 1.Dapper是一个轻型的 ...
- Dapper学习笔记(一)
https://github.com/StackExchange/dapper-dot-net Dapper是对IDbConnection的扩展,需要使用Dapper提供的扩展只需要把SqlMappe ...
- Dapper学习笔记(4)-事务
Dapper中对事务的处理也非常简单,如下代码所示: private void DapperTransaction() { using (IDbConnection con = OpenConnect ...
- Dapper学习笔记(2)-链接引用
在研究Dapper源码时发现Dapper NET45类库中的SqlMapper.cs文件前面有个蓝色的箭头图标,发现在Dapper NET45文件夹下根本不存在SqlMapper.cs文件,其文件属性 ...
- [C#]Dapper学习笔记
1.安装,直接用nuget搜索Dapper就行,不过只支持框架4.5.1 2.数据库测试表 CREATE TABLE [dbo].[Student]( [ID] [bigint] NULL, ) NU ...
- Dapper学习笔记
听说有个轻量化的orm Dapper,我就去了解下.试着对Sql Server和Mysql进行增删改查,体验不错.它不如EF臃肿,也比一般的封装灵活,比如我们封装了一个映射类.利用反射,在Execut ...
- Dapper学习笔记(5)-存储过程
一.无参存储过程 第一步:创建一个不带参数的存储过程,代码如下: CREATE PROCEDURE [dbo].[QueryRoleNoParms] AS BEGIN SELECT * FROM T_ ...
- Dapper学习笔记(3)-增、删、改、查
一.建表 在数据库中建立如下三张表: CREATE TABLE [dbo].[T_User] ( , ) PRIMARY KEY NOT NULL, ) NOT NULL, ) NULL, ) NUL ...
- 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移
不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...
随机推荐
- ffmpeg控制台上不能输出信息的解决办法
最近遇到下面类似的问题 我下载了最新版本(1.1.2)版本的ffmpeg,在windows平台下使用msys+mingw编译成功后,我输入命令后,一点输出信息都没有,例如: ffmpeg -v 这时候 ...
- @Inject 注入 还是报空指针
@Inject 注入 还是报空指针 发布于 572天前 作者 子寒磊 1435 次浏览 复制 上一个帖子 下一个帖子 标签: 无 @IocBean@Service("userM ...
- Android 编辑框(EditText)属性学习
EditText的属性很多,这里介绍几个:android:hint="请输入数字!"//设置显示在空间上的提示信息android:numeric="integer&quo ...
- Python 连接、操作数据库
使用python3+pymysql 一.安装python3 a) 从网上下载安装吧 二.安装pymysql https://pypi.python.org/pypi/PyMySQL h ...
- linux命令详解-useradd,groupadd
linux命令详解-useradd,groupadd 我们在linux命令行中输入useradd: Options: -b, --base-dir BASE_DIR base direc ...
- ReactiveObjC框架的简单介绍
最近在一直在学习RAC框架的Object-C版本ReactiveObjC(Swift版本为ReactiveSwift),这篇文章简单展示一下学习的成果!!!如果有什么地方理解错误,欢迎大家指正!!!互 ...
- 【赛时总结】 ◇赛时·II◇ AtCoder ABC-100
◆赛时·II◆ ABC-100 ■唠叨■ ABC终于超过百场比赛啦(毫不犹豫地参加).然后莫名其妙的好像是人很多,评测慢得不可理喻.然后我就--交了一大发--错误程序--然后B题就没了.最后的D题居然 ...
- juicer
function financingBodyTable(){ var jsonData = { FinancingBodyJSON:${relaListArr}//list数组 } var addMo ...
- Python3.6+pyinstaller+Django
方案(一)Python3.6+pyinstaller+windows服务 一.Python3.6(64位)环境清单 Django==1.11.7 django-windows-tools==0.2 P ...
- MySQL基础 (麦子学员 php 第二阶段)
通过my.ini配置文件修改字符集:客户端字符集设置:[mysql]default-character-set=utf8 [mysqld] character-set-server=utf8 .设置之 ...