public override string ToString()
        {
            StringBuilder resultBuilder = WithFromString ? new StringBuilder(" FROM ") : new StringBuilder(" ");

            resultBuilder.Append(entityDefFactory.GetDef <T>().DbTableReservedName);
            resultBuilder.Append(_statementBuilder);

            return(resultBuilder.ToString());
        }
        public IList <T> ToList <T>(IDataReader reader)
            where T : Entity, new()
        {
            IList <T> lst = new List <T>();

            //if (reader == null)
            //{
            //    return lst;
            //}

            int len = reader.FieldCount;

            string[] propertyNames = new string[len];


            DatabaseEntityDef definition = _modelDefFactory.GetDef <T>();

            for (int i = 0; i < len; ++i)
            {
                propertyNames[i] = reader.GetName(i);
            }

            while (reader.Read())
            {
                T item = new T();

                for (int i = 0; i < len; ++i)
                {
                    DatabaseEntityPropertyDef property = definition.GetProperty(propertyNames[i])
                                                         ?? throw new DatabaseException($"Lack DatabaseEntityPropertyDef of {propertyNames[i]}.");

                    object fieldValue = reader[i];

                    if (property.PropertyName == "Id" && fieldValue == DBNull.Value)
                    {
                        //item = null;
                        //break;
                        throw new DatabaseException($"Database value of Property 'Id' is null. Entity:{definition.EntityFullName}");
                    }

                    object?value = property.TypeConverter == null?
                                   ValueConverterUtil.DbValueToTypeValue(fieldValue, property.PropertyType) :
                                       property.TypeConverter.DbValueToTypeValue(fieldValue);

                    if (value != null)
                    {
                        property.SetValue(item, value);
                    }
                }

                lst.Add(item);
                //if (item != null && !item.Deleted)
                //{
                //    lst.Add(item);
                //}
            }

            return(lst);
        }
Beispiel #3
0
        public IList <T> ToList <T>(IDataReader reader)
            where T : DatabaseEntity, new()
        {
            IList <T> lst = new List <T>();

            if (reader == null)
            {
                return(lst);
            }

            int len = reader.FieldCount;

            string[] propertyNames = new string[len];


            DatabaseEntityDef definition = _modelDefFactory.GetDef <T>();

            for (int i = 0; i < len; ++i)
            {
                propertyNames[i] = reader.GetName(i);
            }

            while (reader.Read())
            {
                T item = new T();

                for (int i = 0; i < len; ++i)
                {
                    DatabaseEntityPropertyDef property = definition.GetProperty(propertyNames[i]);
                    object fieldValue = reader[i];

                    if (property.PropertyName == "Id" && fieldValue == DBNull.Value)
                    {
                        item = null;
                        break;
                    }

                    object value = property.TypeConverter == null?
                                   ValueConverter.DbValueToTypeValue(property.PropertyType, fieldValue) :
                                       property.TypeConverter.DbValueToTypeValue(fieldValue);

                    property.SetValue(item, value);
                }

                if (item != null && !item.Deleted)
                {
                    lst.Add(item);
                }
            }

            return(lst);
        }
Beispiel #4
0
        private string GetSelectClauseStatement <T>()
        {
            DatabaseEntityDef modelDef = _entityDefFactory.GetDef <T>();
            string            cacheKey = string.Format(GlobalSettings.Culture, "{0}_{1}_SELECT", modelDef.DatabaseName, modelDef.TableName);

            if (_sqlStatementDict.ContainsKey(cacheKey))
            {
                return(_sqlStatementDict[cacheKey]);
            }

            StringBuilder argsBuilder = new StringBuilder();

            foreach (DatabaseEntityPropertyDef info in modelDef.Properties)
            {
                if (info.IsTableProperty)
                {
                    argsBuilder.AppendFormat(GlobalSettings.Culture, "{0}.{1},", modelDef.DbTableReservedName, info.DbReservedName);
                    //argsBuilder.AppendFormat("{0},", info.DbReservedName);
                }
            }

            if (argsBuilder.Length > 0)
            {
                argsBuilder.Remove(argsBuilder.Length - 1, 1);
            }

            string selectClause = string.Format(GlobalSettings.Culture, "SELECT {0} ", argsBuilder.ToString());

            _sqlStatementDict.TryAdd(cacheKey, selectClause);

            return(selectClause);
        }
        public IList <TSelect> Retrieve <TSelect, TFrom, TWhere>(SelectExpression <TSelect> selectCondition, FromExpression <TFrom> fromCondition, WhereExpression <TWhere> whereCondition, TransactionContext transContext = null)
            where TSelect : DatabaseEntity, new()
            where TFrom : DatabaseEntity, new()
            where TWhere : DatabaseEntity, new()
        {
            #region Argument Adjusting

            if (selectCondition != null)
            {
                selectCondition.Select(t => t.Id).Select(t => t.Deleted).Select(t => t.LastTime).Select(t => t.LastUser).Select(t => t.Version);
            }

            if (whereCondition == null)
            {
                whereCondition = Where <TWhere>();
            }

            whereCondition.And(t => t.Deleted == false).And <TSelect>(ts => ts.Deleted == false).And <TFrom>(tf => tf.Deleted == false);

            #endregion

            IList <TSelect>   result    = null;
            IDataReader       reader    = null;
            DatabaseEntityDef selectDef = _entityDefFactory.GetDef <TSelect>();

            try
            {
                IDbCommand command = _sqlBuilder.CreateRetrieveCommand(selectCondition, fromCondition, whereCondition);
                reader = _databaseEngine.ExecuteCommandReader(transContext?.Transaction, selectDef.DatabaseName, command, transContext != null);
                result = _modelMapper.ToList <TSelect>(reader);
            }
            //catch (DbException ex)
            //{
            //    throw ex;
            //}
            finally
            {
                if (reader != null)
                {
                    reader.Dispose();
                }
            }

            return(result);
        }