实用扩展

实用扩展

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

快速映射:

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

/* 只查询 PersonModel 中有的字段 */
List<PersonModel> personModels = context.Query<Person>().MapTo<PersonModel>().ToList();

/*或者*/
List<PersonModel> personModels = context.Query<Person>().ToList<PersonModel>();

忽略查询字段:

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

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

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

更新部分字段:

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

Person person = new Person() { Id = 1, Name = "Chloe", Age = 18, Gender = Gender.Female, NickName = "chloe" };

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

获取 DataTable:

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

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

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

int age = 18;
List<Person> persons = context.SqlQueryFmt<Person>($"select * from Person where age>={age}").ToList();

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

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