Beispiel #1
0
        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);
        }
Beispiel #2
0
        ///// <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());
        }