Exemplo n.º 1
0
        public bool Select(object entity, params object[] outputProperties)
        {
            object        entityType = MappingProvider.GetEntityTypeByInstance(entity);
            List <string> outputs    = Util.CollectNames(outputProperties);

            QueryExpression queryExpression = new QueryExpression();

            queryExpression.EntityType = entityType;
            if (outputProperties == null || outputProperties.Length == 0)
            {
                ITable table = MappingProvider.GetTable(entityType);
                queryExpression.Selects.Add(table.NonPrimaryKeyProperties);
            }
            else
            {
                queryExpression.Selects.Add(outputs);
            }
            queryExpression.Wheres = CreateConditionByKeyColumn(entity);

            if (queryExpression.Selects.Count <= 0)
            {
                return(Exists(entity));
            }
            SelectionResult result = SqlProvider.SelectCollection(this, MappingProvider, null, queryExpression);

            bool hasResult = result.DataReader.Read();

            if (hasResult)
            {
                ObjectAccessor.Fill(SqlProvider, MappingProvider, result.DataReader, entity, result.ObjectFiller);
            }
            result.DataReader.Close();

            return(hasResult);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Internal Extendable method: 创建实体对象
        /// </summary>
        /// <param name="objectAccessor">实体对象访问器</param>
        /// <param name="tableMapper">Table元数据解析器</param>
        /// <param name="reader">数据流</param>
        /// <param name="columnNames">查询结果列的数组</param>
        /// <returns>实体对象</returns>
        internal static object CreateEntity(this ObjectAccessor objectAccessor, ITableMapper tableMapper, IDataReader reader, string[] columnNames)
        {
            //创建对象
            object entity = objectAccessor.CreateInstance();

            //读取DataReader当前行,为entity各个属性赋值
            objectAccessor.Fill(tableMapper.GetColumnMappers(), reader, columnNames, entity);
            //返回对象
            return(entity);
        }
Exemplo n.º 3
0
        public int SelectCollection(IList list, IQueryExpression queryExpression)
        {
            if (queryExpression.EntityType == null)
            {
                throw new InvalidOperationException("queryExpression.EntityType属性不允许空");
            }
            SelectionResult result = SqlProvider.SelectCollection(this, MappingProvider, null, queryExpression);

            int oldCount = list.Count;

            while (result.DataReader.Read())
            {
                object entity = ObjectAccessor.CreateInstance(queryExpression.EntityType);
                ObjectAccessor.Fill(SqlProvider, MappingProvider, result.DataReader, entity, result.ObjectFiller);
                list.Add(entity);
            }

            result.DataReader.Close();
            int i = queryExpression.ReturnMatchedCount ? result.TotalMatchedCount : list.Count - oldCount;

            return(i);
        }