protected abstract void DoFind
 (
     DicomAttributeCollection request,
     QueryOptions options,
     IEnumerable <IMatchingCondition> conditions,
     ObjectArchieveResponseBuilder responseBuilder
 );
        //protected virtual DicomInstanceArchieveDataAccess CreateDataAccess()
        //{
        //    DicomInstanceArchieveDataAccess dataAccess = new DicomInstanceArchieveDataAccess(connectionString);
        //    return dataAccess;
        //}

        protected virtual ObjectArchieveResponseBuilder CreateResponseBuilder(string queryLevel)
        {
            StorageDbSchemaProvider       dbSchema        = new StorageDbSchemaProvider( );
            ObjectArchieveResponseBuilder responseBuilder = new ObjectArchieveResponseBuilder(dbSchema, queryLevel);

            responseBuilder.QueryLevel = queryLevel;

            return(responseBuilder);
        }
        public ICollection <DicomAttributeCollection> Find
        (
            DicomAttributeCollection request,
            QueryOptions options
        )
        {
            StorageDbSchemaProvider          dbSchema        = new StorageDbSchemaProvider( );
            IEnumerable <IMatchingCondition> conditions      = null;
            ObjectArchieveResponseBuilder    responseBuilder = new ObjectArchieveResponseBuilder(dbSchema, options.QueryLevel);


            conditions = BuildConditions(request);

            DoFind(request, options, conditions, responseBuilder);

            return(responseBuilder.GetResponse( ));
        }