private IRowMapper <TResult> GetRowMapper <TResult>() where TResult : new() { Type type = typeof(TResult); IRowMapper <TResult> rowMapper; TableAttribute attributes = type.GetCustomAttributes(true).OfType <TableAttribute>().FirstOrDefault(); if (attributes == null) { rowMapper = new PropertyEqualColumnMapper <TResult>(); } else { rowMapper = new ColumnAttributeMapper <TResult>(this.DatabaseInfo.TablesInfo); } return(rowMapper); }
///// <summary> ///// 插入多条数据,使用事务 todo 批量插入更新,sqlserver SqlBulkCopy oracle odp.net支持 OracleCommand.ArrayBindCount ///// </summary> ///// <param name="domains">要插入数据库的数据列表</param> ///// <param name="entityProperties">TDomain中需要插入到数据库的属性,该属性必须对应数据库字段.如不传更新所有列</param> //public virtual void Insert(List<TDomain> domains, params Expression<Func<TDomain, object>>[] entityProperties) //{ // //todo c# 4.5 根据调用方法缓存属性。 // using (var transactionScope = new TransactionScope(this.QuerySession)) // { // foreach (var domain in domains) // { // this.Insert(domain, entityProperties); // } // transactionScope.Complete(); // } //} /// <summary> /// 查询数据 /// </summary> /// <param name="where">查询条件</param> /// <param name="columnMapperStrategy">映射策略</param> /// <param name="usedProperies">TDomain中需要插入到数据库的属性,该属性必须对应数据库字段 ,usedProperies为空时查询所有字段</param> /// <returns></returns> private List <TDomain> Select(Expression <Func <TDomain, bool> > where, ColumnMapperStrategy columnMapperStrategy, params string[] usedProperies) { //Ensure.That(usedProperies).HasItems(); IRowMapper <TDomain> rowMapper = null; if (columnMapperStrategy == ColumnMapperStrategy.Property) { rowMapper = new PropertyEqualColumnMapper <TDomain>(); } else { rowMapper = new ColumnAttributeMapper <TDomain>(); } Table table = this.GetTable(columnMapperStrategy); SelectBuilder <TDomain> selectBuilder = new SelectBuilder <TDomain>(table, QuerySession.DatabaseInfo.SqlDialect, usedProperies); SqlBuilder whereSqlBuilder = this.CreateSqlBuilder(null); whereSqlBuilder.AppendByAutoGen("where", where, columnMapperStrategy, false); selectBuilder.SqlBuilder = whereSqlBuilder; return(this.QuerySession.ExecuteSqlString(selectBuilder.GetSql(), rowMapper, selectBuilder.DbParams).ToList()); }