예제 #1
0
        public void QueryAll_with_pagination()
        {
            var querySerializer = new MSolrQuerySerializer();

            querySerializer.serialize += _ => "id:123456";

            var serviceLocator = new MServiceLocator();

            serviceLocator.getService = MServiceLocator.Table(new Dictionary <System.Type, object> {
                { typeof(ISolrReadOnlyOperations <Entity>), mockSolr },
                { typeof(ISolrQuerySerializer), querySerializer },
            });

            ServiceLocator.SetLocatorProvider(() => serviceLocator);

            mockSolr.queryStringOptions += (s, o) => {
                Assert.Equal("id:123456", s);
                Assert.Equal(5, o.Rows);
                Assert.Equal(3, o.Start);
                Assert.Equal(1, o.OrderBy.Count);
                Assert.Equal("pepe asc", o.OrderBy.First().ToString());
                return(new SolrQueryResults <Entity>());
            };
            mockSolr.queryStringOptions &= x => x.Expect(1);

            using (var session = new SolrSession(sessionFactory.OpenSession())) {
                var entities = session.CreateSolrQuery(new SolrQueryByField("id", "123456"))
                               .SetMaxResults(5)
                               .SetFirstResult(3)
                               .SetSort(Order.Asc("pepe"))
                               .List <Entity>();
            }
        }
예제 #2
0
        public void CanGetCredit()
        {
            //save sample credit in the db
            UnitOfWork.Current.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
            Credit credit = SaveNewCredit();

            UnitOfWork.Current.Flush();
            UnitOfWork.CurrentSession.Evict(credit);

            //get saved credit
            NHibernate.Criterion.Order order = new NHibernate.Criterion.Order("Name", true);

            Credit creditDb = Repository<Credit>.FindFirst(order);
            Assert.AreEqual(creditDb, credit);
        }
예제 #3
0
 public ICollection <TEntity> FindAll(int firstResult, int numberOfResults, NHibernate.Criterion.Order selectionOrder, params NHibernate.Criterion.ICriterion[] criteria)
 {
     throw new NotImplementedException();
 }
예제 #4
0
 public ICollection <TEntity> FindAll(NHibernate.Criterion.Order order, params NHibernate.Criterion.ICriterion[] criteria)
 {
     throw new NotImplementedException();
 }
예제 #5
0
 /// <summary>
 /// Sets sort order
 /// </summary>
 /// <param name="o">Sort order</param>
 /// <returns>this</returns>
 public INHSolrQuery SetSort(Order o)
 {
     options.OrderBy = new[] { ConvertOrder(o) };
     return(this);
 }
예제 #6
0
 private SortOrder ConvertOrder(Order o)
 {
     return(SortOrder.Parse(o.ToString()));
 }
예제 #7
0
        public override IList <IDataObject> Get(string objectType, DataFilter filter, int pageSize, int startIndex)
        {
            DataFilter  newFilter   = Utility.CloneDataContractObject <DataFilter>(filter);
            AccessLevel accessLevel = Authorize(objectType, ref newFilter);

            if (accessLevel < AccessLevel.Read)
            {
                throw new UnauthorizedAccessException(String.Format(UNAUTHORIZED_ERROR, _settings["scope"]));
            }

            ISession session = NHibernateSessionManager.Instance.GetSession(_settings["AppDataPath"], _settings["Scope"]);

            try
            {
                if (_dbDictionary.IdentityConfiguration != null)
                {
                    IdentityProperties identityProperties = _dbDictionary.IdentityConfiguration[objectType];
                    if (identityProperties.UseIdentityFilter)
                    {
                        newFilter = FilterByIdentity(objectType, newFilter, identityProperties);
                    }
                }

                DataObject objectDefinition = _dbDictionary.dataObjects.Find(x => x.objectName.ToUpper() == objectType.ToUpper());

                if (objectDefinition == null)
                {
                    throw new Exception("Object type [" + objectType + "] not found.");
                }

                string ns = String.IsNullOrEmpty(objectDefinition.objectNamespace)
          ? String.Empty : (objectDefinition.objectNamespace + ".");

                Type type = Type.GetType(ns + objectType + ", " + _settings["ExecutingAssemblyName"]);

                // make an exception for tests
                if (type == null)
                {
                    type = Type.GetType(ns + objectType + ", NUnit.Tests");
                }

                ICriteria criteria = NHibernateUtility.CreateCriteria(session, type, objectDefinition, newFilter);

                if (pageSize == 0 && startIndex == 0)
                {
                    List <IDataObject> dataObjects = new List <IDataObject>();
                    long totalCount       = GetCount(objectType, filter);
                    int  internalPageSize = (_settings["InternalPageSize"] != null) ? int.Parse(_settings["InternalPageSize"]) : 1000;
                    int  numOfRows        = 0;

                    while (numOfRows < totalCount)
                    {
                        if (filter != null && filter.OrderExpressions != null && filter.OrderExpressions.Count > 0)
                        {
                            criteria.SetFirstResult(numOfRows).SetMaxResults(internalPageSize);
                        }
                        else
                        {
                            NHibernate.Criterion.Order order = new NHibernate.Criterion.Order(objectDefinition.keyProperties.First().keyPropertyName, true);
                            criteria.AddOrder(order).SetFirstResult(numOfRows).SetMaxResults(internalPageSize);
                        }

                        dataObjects.AddRange(criteria.List <IDataObject>());
                        numOfRows += internalPageSize;
                    }

                    return(dataObjects);
                }
                else
                {
                    if (filter != null && filter.OrderExpressions != null && filter.OrderExpressions.Count > 0)
                    {
                        criteria.SetFirstResult(startIndex).SetMaxResults(pageSize);
                    }
                    else
                    {
                        NHibernate.Criterion.Order order = new NHibernate.Criterion.Order(objectDefinition.keyProperties.First().keyPropertyName, true);
                        criteria.AddOrder(order).SetFirstResult(startIndex).SetMaxResults(pageSize);
                    }

                    IList <IDataObject> dataObjects = criteria.List <IDataObject>();
                    return(dataObjects);
                }
            }
            catch (Exception ex)
            {
                _logger.Error("Error in Get: " + ex);
                throw new Exception(string.Format("Error while getting a list of data objects of type [{0}]. {1}", objectType, ex));
            }
            finally
            {
                CloseSession(session);
            }
        }