protected DomainObject AbstractFindSingleWithParameterSource(Type type, ParameterSource parameterSource) { // Check identity map. DomainObject result = identityMap.GetDomainObject(type, parameterSource.UniqueId); if (result != null) { return(result); } // Identity map not hit, do query. using (DbConnection connection = providerFactory.CreateConnection()) { connection.ConnectionString = DbSettings.ConnectionString; connection.Open(); DbCommand command = providerFactory.CreateCommand(); command.Connection = connection; command.CommandText = FindSingleStatement(); // Find single, implement by derived class. foreach (Criterion criterion in parameterSource.GetAllCriteria()) { DbParameter parameter = providerFactory.CreateParameter(); parameter.ParameterName = criterion.ParamName; parameter.DbType = criterion.ParamType; parameter.Value = criterion.ParamValue; command.Parameters.Add(parameter); } DbDataReader reader = command.ExecuteReader(); reader.Read(); int AffectedRows = reader.RecordsAffected; Console.WriteLine("Find() RowsAffected: {0}", AffectedRows); DomainObject domainObject = Load(type, parameterSource.UniqueId, (IDataRecord)reader); return(domainObject); } }
protected IList <DomainObject> AbstractFindManyWithParameterSource(Type type, ParameterSource parameterSource) { using (DbConnection connection = providerFactory.CreateConnection()) { connection.ConnectionString = DbSettings.ConnectionString; connection.Open(); DbCommand command = providerFactory.CreateCommand(); command.Connection = connection; command.CommandText = FindManyStatement(); // Find many, implement by derived class. foreach (Criterion criterion in parameterSource.GetAllCriteria()) { DbParameter parameter = providerFactory.CreateParameter(); parameter.ParameterName = criterion.ParamName; parameter.DbType = criterion.ParamType; parameter.Value = criterion.ParamValue; command.Parameters.Add(parameter); } DbDataReader reader = command.ExecuteReader(); int AffectedRows = reader.RecordsAffected; Console.WriteLine("Find() RowsAffected: {0}", AffectedRows); IList <DomainObject> results = new List <DomainObject>(); while (reader.Read()) { string UniqueId = GetUniqueId((IDataRecord)reader); DomainObject item = Load(type, UniqueId, (IDataRecord)reader); results.Add(item); } return(results); } }