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); }
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); }
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); }