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>();
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()
public User GetUser(Guid id) { User user = new User(); user.Id = id; if (_dataBase.Fill<User>(user)) return user; ; }
Fill 方法返回一个 bool 值,表示是否成功查询并填充了数据。
Fill 方法也有一个高阶重载,可以额外指定查询条件:
public bool Fill<T>(object obj, Dictionary<string, object> attachedWhere) where T : class,new()
4.SQL 语句构造器
有时,我们希望直接通过 SQL 语句实现对数据库表的简单操作,升讯威ADO.NET增强组件提供了一个 SQL 语句构造器,帮助生成 SQL 语句,可以减轻开发人员编写 SQL 语句的工作量和出错的可能性,提高软件工程的质量。
public void AddUser(User user) { SqlStructureBuild sqlStructureBuild = new SqlStructureBuild(); sqlStructureBuild.Type = SqlExpressionType.Insert; sqlStructureBuild.Table = ; sqlStructureBuild.AddParameter(, user.Id); sqlStructureBuild.AddParameter(, user.Name); sqlStructureBuild.AddParameter(, user.Age); SqlExpression sqlExpression = sqlStructureBuild.GetSqlExpression(); _dataBase.ExcuteSqlExpression(sqlExpression); }
ExcuteSqlExpression 方法在执行 SQL 构造器生成的 SqlExpression 对象时,使用的是参数化,强类型的方法进行的。
5.事务
对于连续的数据库操作,升讯威ADO.NET增强组件自动封装为一个事务进行执行,如果执行失败,将自动回滚。
a) 连续写入操作
非常简单,直接使用 Insert 方法插入一个对象集合既可,方法原型如下:
public void InsertList(List<object> objList)