AA.Dapper如何使用
AA.Dapper基于dapper进一步封装而成的orm框架,提供增删改查、分页、事务、原生sql的功能,以满足日常的业务开发。
1.Repository层:
DapperRepository类包含大部分数据库操作如图:
DapperContext.Current.DataBase类支持原生sql,Execute(执行非查询命令对象的sql并返回受影响的行数)、ExecuteScalar(返回select结果集中的第一行第一列)、Query(执行查询sql,并返回结果)
定义仓储类并且继承DapperRepository,如以下代码
代码语言:javascript复制public class UserRoleRepository:DapperRepository<UserRole>, IUserRoleRepository { }
如果有需要原生sql的需求,在IUserRepository接口中添加定义
代码语言:javascript复制int GetUserCount();
在UserRepository中实现
代码语言:javascript复制public class UserRepository : DapperRepository<User>, IUserRepository
{
public int GetUserCount()
{
return DapperContext.Current.DataBase.ExecuteScalar<int>
("select count(*) from Sys_UserInfo");
}
}
2.ApplicationServce层
(1)新增
代码语言:javascript复制_userRepository.Insert(entityUser);
(2)修改
代码语言:javascript复制var entity = _userRepository.Get(input.SysNo);
entity.Status = 320;
_userRepository.Update(entity);
(3)删除
代码语言:javascript复制 var entity = _userRepository.Get(input.SysNo);
_userRepository.Delete(entity);
(4)查询
代码语言:javascript复制//通过主键获取单个实体
_userRepository.Get(input.SysNo);
//通过Expression条件获取
_userRepository.Select(x => x.SysNo == input.SysNo);
//分页
var result = _userRepository.From(sql =>
{
sql.Select()
.Where(x=>x.UserName==input.UserName)
.Page(input.PageIndex, input.PageSize);
});
(5)事务
代码语言:javascript复制using (var dbTransaction = dapperContext.BeginTransaction())
{
try
{
var user = new UserInfo()
{
UserName = "chengTian",
RealName = "成天",
GmtCreate = DateTime.Now,
GmtModified = DateTime.Now,
LastLoginDate = DateTime.Now
};
userInfoRepository.Insert(user);
userAlbumRepository.Insert(new UserAlbum
{
Pic = "image/one.jgp"
});
dapperContext.Commit();
}
catch (Exception ex)
{
dbTransaction.Rollback();
}
(6)动态Expression
删除、查询条件需要根据传入的参数判断使用DynamicWhereExpression动态构造Expression 如以下代码
代码语言:javascript复制var where = DynamicWhereExpression.Init<User>();
if (input.RealName != "")
{
where = where.And(x => x.RealName.Contains(input.RealName));
}
if (input.SysNo!=Guid.Empty)
{
where = where.And(x=>x.SysNo==input.SysNo);
}
if (input.SysNos.Any())
{
where = where.And(x=>input.SysNos.Contains(x.SysNo));
}
var result = _userRepository.From(sql =>
{
sql.Select()
.Where(where)
.Page(input.PageIndex, input.PageSize);
});
https://github.com/ChengLab/AAFrameWork 源码地址
用起来还是很顺手的,目前比较成熟也很多,不过AA.Dapper不是全新的轮子,只是进一步的封装,有了Ef的便捷性。你可以hold住的orm,代码可以任意扩展,只要你熟悉dapper。