Insql - 轻量级 .NET ORM 类库
MIT
跨平台
C#
软件简介
Insql 是一个轻量级的.NET ORM类库。对象映射基于Dapper, Sql配置灵感来自于Mybatis。
功能特点:
-
支持 DoNet Core 2.0+ && DotNet Framework 4.6.1+
-
支持依赖注入系统
-
MyBatis sql xml 语法
-
多数据库支持
-
灵活扩展性
-
使用简单
基本用法:
添加Insql
public void ConfigureServices(IServiceCollection services)
{
services.AddInsql();
services.AddInsqlDbContext<UserDbContext>(options =>
{
//options.UseSqlServer(this.Configuration.GetConnectionString("sqlserver"));
options.UseSqlite(this.Configuration.GetConnectionString("sqlite"));
});
}
创建 DbContext
public class UserDbContext : Insql.DbContext
{
public UserDbContext(Insql.DbContextOptions<UserDbContext> options)
: base(options)
{
}
public IEnumerable<UserInfo> GetUserList(string userName)
{
//sqlId = "GetUserList"
//sqlParam is PlainObject or IDictionary<string,object>
return this.Query<UserInfo>(nameof(GetUserList), new { userName, userGender = Gender.W });
}
public void InsertUser(UserInfo info)
{
var userId = this.ExecuteScalar<int>(nameof(InsertUser),info);
info.UserId = userId;
}
public void UpdateUserSelective(UserInfo info)
{
this.Execute(nameof(UpdateUserSelective), info);
}
}
//user model
public class UserInfo
{
public int UserId { get; set; }
public string UserName { get; set; }
public Gender? UserGender { get; set; }
}
public enum Gender
{
M,
W
}
创建 DbContext.insql.xml
创建UserDbContext.insql.xml
文件并且修改这个文件的属性为嵌入式文件
类型 . insql type
与
UserDbContext
类型对应.
<insql type="Example.Domain.Contexts.UserDbContext,Example.Domain" >
<sql id="selectUserColumns">
select user_id as UserId,user_name as UserName,user_gender as UserGender from user_info
</sql>
<select id="GetUserList">
<include refid="selectUserColumns" />
<where>
<if test="userName != null">
<bind name="likeUserName" value="'%' + userName + '%'" />
user_name like @likeUserName
</if>
<if test="userGender != null and userGender != 'M' ">
and user_gender = @userGender
</if>
</where>
order by user_id
</select>
<insert id="InsertUser">
insert into user_info (user_name,user_gender) values (@UserName,@UserGender);
select last_insert_rowid() from user_info;
</insert>
<update id="UpdateUserSelective">
update user_info
<set>
<if test="UserName != null">
user_name=@UserName,
</if>
<if test="UserGender != null">
user_gender=@UserGender
</if>
</set>
where user_id = @UserId
</update>
</insql>
使用 DbContext
使用UserDbContext
在Domain Service中或者Web Controller中
public class ValuesController : ControllerBase
{
private readonly UserDbContext userDbContext;
public ValuesController(UserDbContext userDbContext)
{
this.userDbContext = userDbContext;
}
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
//可以这样使用事务
this.userDbContext.DoWithTransaction(() =>
{
var userInfo = new Domain.UserInfo
{
UserName = "loveW",
UserGender = Domain.Gender.M
};
this.userDbContext.InsertUser(userInfo);
this.userDbContext.UpdateUserSelective(new Domain.UserInfo
{
UserId = userInfo.UserId,
UserName = "loveWWW",
});
});
var list = this.userDbContext.GetUserList("love");
//todo return
}
}