实用扩展

实用扩展

框架提供了许多实用的扩展方法,需要引用 Chloe.Extension.dll,同时也要 using Chloe;,nuget 安装命令:Install-Package Chloe.Extension

异步:

IDbContext 与 IQuery<T> 接口异步扩展,具体可参考:https://github.com/shuxinqin/Chloe/blob/master/src/Chloe.Extension/DbContextAsyncExtension.cs
https://github.com/shuxinqin/Chloe/blob/master/src/Chloe.Extension/QueryAsyncExtension.cs

快速映射:

MapTo 扩展方法可实现实体与 Model 间快速映射。

/* 只查询 UserModel 中有的字段 */
List<UserModel> userModels = context.Query<User>().MapTo<UserModel>().ToList();

/*或者*/
List<UserModel> userModels = context.Query<User>().ToList<UserModel>();

忽略查询字段:

Ignore 扩展方法可实现查询数据时不包含某些字段。

/* 查询 User 表,但忽略掉 Name 和 Age 属性,生成的 sql 中不会包含 Name 和 Age 字段 */
context.Query<User>().Ignore("Name", "Age").ToList();

/* 以 lambda 的方式 */
context.Query<User>().Ignore(a => new { a.Name, a.Age }).ToList();

更新部分字段:

UpdateOnly 扩展方法可实现更新部分字段。

User user = new User() { Id = 1, Name = "shuxin", Age = 18, Gender = Gender.Man, NickName = "so" };

/* 只更新字段 Name 和 Age */
context.UpdateOnly<User>(user, a => new { a.Name, a.Age });  //lambda 方式
context.UpdateOnly<User>(user, "Name", "Age");  //字符串方式

获取 DataTable:

DataTable dt = context.Session.ExecuteDataTable("select * from users where age>=@age", new { age = 18 });

FormatSqlQuery(仅.NET Core版本支持):

FormatSqlQuery 扩展方法可以执行原生sql语句,并且会自动参数化。

int age = 18;
List<User> users = context.FormatSqlQuery<User>($"select * from Users where age>={age}").ToList();

//或者
FormattableString sql = $"select * from Users where age>={age}"; //此处声明变量不能是 var 或者 string,否则会生成非参数化 sql,有潜在的 sql 注入问题
users = context.FormatSqlQuery<User>(sql).ToList();

/*
 * 生成参数化 sql:
 * Input Int32 @P_0 = 18;
   select * from Users where age>=@P_0
 */