using Zhaizj.Framework; using Zhaizj.Framework.Data; using System; using System.Collections; using System.Data; using System.Collections.Generic; using Zhaizj.Framework.ORM.Caching; namespace Zhaizj.Framework.ORM.Operation { internal class FindByOperation { private static readonly ILog logger = LogManager.GetLogger( typeof( FindByOperation ) ); public static Query Find( String condition, ObjectInfo state ) { Includer includer = state.Includer; if (strUtil.HasText( includer.SelectedProperty ) && (includer.SelectedProperty != "*")) { Query query = new Query( condition, state ); return query.select( includer.SelectedProperty ); } return new Query( condition, state ); } internal static IList Find( ConditionInfo condition ) { IList results = ObjectPool.FindByQuery( condition ); if (results != null) return results; if ("*".Equals( condition.SelectedItem )) { condition.State.includeAll(); } else { condition.State.include( SqlBuilder.GetIncludeProperty( condition.SelectedItem ) ); } IList includeEntityPropertyList = condition.State.Includer.EntityPropertyList; IDbCommand cmd = DataFactory.GetCommand( condition.Sql, DbContext.getConnection( condition.State.EntityInfo ) ); foreach (String key in condition.Parameters.Keys) { DataFactory.SetParameter( cmd, key, condition.Parameters[key] ); } Hashtable hashtable = new Hashtable(); IDataReader record = null; results = new ArrayList(); try { record = cmd.ExecuteReader(); while (record.Read()) { EntityPropertyUtil.Fill_EntityProperty_Ids( record, includeEntityPropertyList, ref hashtable ); results.Add( FillUtil.Populate( record, condition.State ) ); } } catch (Exception ex) { logger.Error( ex.Message ); logger.Error( ex.StackTrace ); throw ex; } finally { OrmHelper.CloseDataReader( record ); } if (results.Count == 0) return results; return EntityPropertyUtil.setEntityProperty( condition.State, results, hashtable ); } } }