简介

Dapper - 是国外著名开发者社区Stackoverflow发布的一个轻量级,开源ORM组件。
更多内容可以参考: Dapper (https://github.com/StackExchange/dapper-dot-net)

扩展

DapperExtensions - 是基于Dapper扩展的类库,让使用者更简单,快捷,统一的使用Dapper。
更多内容可以参考: DapperExtensions (https://github.com/tmsmith/Dapper-Extensions)

实战

表结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
#用户信息
DROP TABLE IF EXISTS `UserInfo`;
CREATE TABLE `UserInfo` (
`ID` VARCHAR(32) NOT NULL COMMENT "Id,主键",
`No` VARCHAR(128) COMMENT "编号",
`UserName` VARCHAR(128) COMMENT "用户名",
`NiceName` VARCHAR(128) COMMENT "昵称",
`Paw` VARCHAR(128) COMMENT "密码",
`Status` INT COMMENT "状态",
`CreateDateTime` DATETIME NOT NULL COMMENT "创建时间" ,
`LastUpdateDateTime` DATETIME NULL COMMENT "更新时间"
)ENGINE=InnoDB DEFAULT CHARSET = utf8 COMMENT = "用户信息";

查询 For SQL 参数 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[TestMethod]
public void QueryListForSQLTest()
{
using (IUnitOfWork unitOfWork = GetUnitOfWork())
{
var commonRepo = unitOfWork.GetRepositoryForEntity<UserInfo>();
var dto = commonRepo.GetList("select * from userinfo where NiceName like @NiceName ",
new
{
NiceName ="%小潮%"
});

foreach (var item in dto)
{
Console.WriteLine(item.NiceName);
}
}
}

查询 For 对象 属性 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[TestMethod]
public void QueryListTest()
{
using (IUnitOfWork unitOfWork = GetUnitOfWork())
{
var commonRepo = unitOfWork.GetRepositoryForEntity<UserInfo>();
var predicate = Predicates.Field<UserInfo>(f => f.NiceName, Operator.Like, "%小潮%");
var dto = commonRepo.GetList(predicate);
foreach (var item in dto)
{
Console.WriteLine(item.NiceName);
}
}
}

数据持久化 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[TestMethod]
public void IUnitOfWorkTest()
{
using (IUnitOfWork unitOfWork = GetUnitOfWork())
{
unitOfWork.BeginTransaction();
var commonRepo = unitOfWork.GetRepositoryForEntity<UserInfo>();
commonRepo.Create(new UserInfo()
{
NiceName = "小潮1111111",
No = "1231231321",
Paw = "123456",
UserName = "xiaochao"
});
commonRepo.Create(new UserInfo()
{
NiceName = "小潮222222222",
Paw = "123456",
UserName = "xiaochao"
});
unitOfWork.Commit();
}
}

对于DapperExtensions 可以自定义Mapper来映射数据库和实体的关系。

Mapper配置 :

1
2
3
4
5
6
7
8
9
public class UserInfo_Mapper : ClassMapper<UserInfo>
{
public UserInfo_Mapper()
{
base.Table("UserInfo");
Map(f => f.Id);
AutoMap();
}
}

使用DapperExtension组件的 SetMappingAssemblies 方法,将一个或多个程序集包含Mapper配置规则适配到DapperExtension中:

DapperExtensions.DapperExtensions.SetMappingAssemblies(new[] { typeof(CustomMapping<>).Assembly });

总结

最早接触轻量级ORM是 petapoco (https://github.com/CollaboratingPlatypus/PetaPoco) 两者很像,都是很棒的轻量级ORM框架。

参考资料