public virtual TEntity GetOne(ICondition filter, IOrderByExpression order_by) { var select = GetSelectStatement(filter, order_by); var reader = select.ExecuteReader(); TEntity entity = default(TEntity); if (reader.Read()) { entity = ReadEntity(reader); } reader.Close(); if (entity == null) { return(default(TEntity)); } if (_associations.Count() > 0) { foreach (IAssociationMapping _association in _associations) { var amapping = MappingFactory.GetMapping(_association.OtherMappingType); object val = entity[_association.ThisKeys[0]]; if (val == null) { continue; } int colCount = amapping.Columns.Count; var select2 = SqlUtils.CreateSelectStatement(amapping); select2.ConnectionStringName = select.ConnectionStringName; select2.Where(Condition.IsEqual(_association.OtherKeys[0], new SqlNumber((int)val))); var values = new Dictionary <string, object>(); var reader2 = select2.ExecuteReader(); if (reader2.Read()) { if (entity[_association.Name] == null) { entity[_association.Name] = Activator.CreateInstance(entity.GetProperty(_association.Name).PropertyType, (int)val); } Entity _prop = entity[_association.Name] as Entity; for (int f = 0; f < reader2.FieldCount; f++) { _prop[reader2.GetName(f)] = reader2.GetValue(f); } } reader2.Close(); } } if (_hasManyAssociations.Count() == 0) { return(entity); } foreach (IAssociationMapping hma in _hasManyAssociations) { var omapping = MappingFactory.GetMapping(hma.OtherMappingType); int colCount = omapping.Columns.Count; var select2 = SqlUtils.CreateSelectStatement(omapping); select2.ConnectionStringName = select.ConnectionStringName; ICondition idCriteria = IdentityInsert ? Conditions.IsEqual(hma.OtherKeys[0], new SqlNumber(entity.Id.ToString())) : Conditions.IsEqual(hma.OtherKeys[0], new SqlString(entity.Id.ToString())); select2.Where(idCriteria); var reader2 = select2.ExecuteReader(); while (reader2.Read()) { var values = new Dictionary <string, object>(); for (int f = 0; f < reader2.FieldCount; f++) { values.Add(reader2.GetName(f), reader2.GetValue(f)); } entity.AddValueObject(hma.Name, values); } reader2.Close(); } return(entity); }