HTML5技术

GitHub开源:升讯威ADO.NET增强组件 sheng.ADO.NET.Plus V1.3 - sheng.chao(3)

字号+ 作者:H5之家 来源:H5之家 2017-03-22 13:02 我要评论( )

在使用一般ORM框架时,对于复杂的数据库表结构,常常可以见到非常多的字段定义,但在我们的实际业务中,这些字段可能都有不同的逻辑归属,此外,在开发中,我们可能在数据传递,操作的过程中, 希望只传递或公开一

在使用一般ORM框架时,对于复杂的数据库表结构,常常可以见到非常多的字段定义,但在我们的实际业务中,这些字段可能都有不同的逻辑归属,此外,在开发中,我们可能在数据传递,操作的过程中,希望只传递或公开一部分数据,而不是整个对象进行传递

public class User { [Key] public Guid Id { get; set; } public string Name { get; set; } public int Age { get; set; } [Partial] public ExtraInfo ExtraInfo { get; set; } } public class ExtraInfo { public string ExtraInfo { get; set; } }

 

只需在对象上加上 PartialAttribute ,表示属性的对象是 当前数据集 的一部分字段所表示的子对象

PartialAttribute  还提供了 FieldRelationship 用来进一步指定映射关系。

这样我们实现了实体类对数据表(数据集)的多对一映射,那如何实现多对多的映射呢?实际上非常简单,使用SQL,视图,存储过程进行多表查询,结合使用 PartialAttribute 即可。

 

三、进阶操作 1.高级查询

除了上文中提到的基本 Select<T>() 方法外,升讯威ADO.NET增强组件提供了额外的几个进阶方式进行数据查询。

 

a) 基本查询

public List<T> Select<T>() where T : class,new()

上文已展示。

 

b) 附加查询条件

public List<T> Select<T>(Dictionary<string,object> attachedWhere) where T : class,new()

通过 attachedWhere 额外的指定查询条件。Dictionary<string,object> 中的 string 和 object 分别指定字段和字段值。

为什么不使用 lamda?在一些场景中不够灵活。

 

c)通过 SQL 语句进行查询

既然是ADO.NET增强组件,直接使用SQL来操作当然是重头戏。

public List<T> Select<T>(string sql) where T : class

直接编写 SQL 语句进行数据查询,Select 方法可根据返回的结果集和指定的对象类型进行自动映射,返回强类型对象集合

可以传递任意能够返回结果集的SQL语句,返回的结果集自动与泛型T匹配,泛型T也不一定就是数据库中的表所映射的对象。

 

d) 参数化 SQL 语句查询

public List<T> Select<T>(string sql, List<CommandParameter> parameterList) where T : class

进行参数化的 SQL 语句查询,例如:

List<CommandParameter> parameterList = new List<CommandParameter>(); parameterList.Add(, )); List<User> userList = _dataBase.Select<User>(parameterList);

 

2.与内存中的 DataSet 进行动态映射

当我们使用存储过程或其它方式得到一个 DataSet 时,升讯威ADO.NET增强组件支持对其进行动态映射,根据 DataSet 数据集得到强类型的对象实例或对象实例的集合。

RelationalMappingUnity 类提供了以下方法:

public static List<T> Select<T>(DataSet ds) where T : class

将 DataSet 视为一个完整数据源,从中查找指定对象类型所映射的表名进行实例化。

 

public static List<T> Select<T>(DataTable dt) where T : class

使用 DataTable 作为唯一数据集,对指定的对象类型进行实例化。

 

Select(DataRow dr, Type type) Select(DataRow dr, Type type, Dictionary<string, string> fieldPair)

上面三个方法提供了更细粒度的操作可能,直接从 DataRow 得到一个强类型的对象实例

 

3.数据填充

很多时候我们需要根据某个已知条件查询得到对象实例,如我们得到 User 的 Id,希望查询数据库表得到 User 对象,在升讯威ADO.NET增强组件中,我们使用 Fill 方法既可。

public bool Fill<T>(object obj) where T : class,new()

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    开源的.NET定时任务组件Hangfire解析 - 彭泽0902

    2017-03-22 13:00

  • 开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    2017-03-18 11:01

  • 一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    一份关于组建.NET Core开源团队的倡议书 - 彭泽0902

    2017-03-13 17:02

  • 【福利大放送】不止是Android,Github超高影响力开源大放送,学习开发必备教科书 - 南尘

    【福利大放送】不止是Android,Github超高影响力开源大放送,学习开

    2017-02-09 12:04

网友点评
d