/// <summary>
        /// 锁定一个给定的聚合根,数据库级别的锁;
        /// 该方法内部不需要考虑事务,因为框架在调用该方法之前已经确保当前事务是开启的;
        /// 默认实现是通过ROWLOCK+UPDLOCK的方式实现行级锁;
        /// </summary>
        protected virtual long LockAggregateRootAfterTransactionStarted(string aggregateRootId)
        {
            var aggregateRootEventType = _aggregateRootEventTypeProvider.GetAggregateRootEventType(typeof(T));
            var aggregateRootName      = GetAggregateRootName();

            DetachedCriteria detachedCriteria = DetachedCriteria.For(aggregateRootEventType)
                                                .Add(Restrictions.Eq("AggregateRootName", aggregateRootName))
                                                .Add(Restrictions.Eq("AggregateRootId", aggregateRootId))
                                                .Add(Subqueries.PropertyEq("Version",
                                                                           DetachedCriteria.For(aggregateRootEventType)
                                                                           .SetProjection(Projections.Max("Version"))
                                                                           .Add(Restrictions.Eq("AggregateRootName", aggregateRootName))
                                                                           .Add(Restrictions.Eq("AggregateRootId", aggregateRootId))));

            detachedCriteria.SetLockMode(LockMode.Upgrade);
            var criteria = detachedCriteria.GetExecutableCriteria(OpenSession());

            var eventList = typeof(EventQueryHelper).GetMethod("GetList").MakeGenericMethod(aggregateRootEventType).Invoke(new EventQueryHelper(), new object[] { criteria }) as IList;

            if (eventList != null && eventList.Count > 0)
            {
                return((long)((AggregateRootEvent)eventList[0]).Version);
            }
            return(0);
        }
Exemplo n.º 2
0
        protected static IList <T> LoadAll <T>()
        {
            DetachedCriteria criteria = DetachedCriteria.For <T>();

            criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());
            return(criteria.GetExecutableCriteria(UnitOfWork.CurrentSession).List <T>());
        }
Exemplo n.º 3
0
        protected virtual ICriteria BuildCriteria(ISession session)
        {
            if (cachedCriteria == null)
            {
                if (detachedCriteria != null)
                {
                    cachedCriteria = detachedCriteria.GetExecutableCriteria(session);
                }
                else
                {
                    cachedCriteria = session.CreateCriteria(targetType);

                    if (criterions != null)
                    {
                        foreach (var queryCriteria in criterions)
                        {
                            cachedCriteria.Add(queryCriteria);
                        }
                    }
                }

                if (orders != null)
                {
                    foreach (var order in orders)
                    {
                        cachedCriteria.AddOrder(order);
                    }
                }
            }

            return(cachedCriteria);
        }
Exemplo n.º 4
0
        public async Task BugAsync()
        {
            using (ISession session = OpenSession())
                using (ITransaction t = session.BeginTransaction())
                {
                    await(session.PersistAsync(new Foo("Foo1", DateTime.Today.AddDays(5))));
                    await(session.PersistAsync(new Foo("Foo2", DateTime.Today.AddDays(1))));
                    await(session.PersistAsync(new Foo("Foo3", DateTime.Today.AddDays(3))));
                    await(t.CommitAsync());
                }

            DetachedCriteria criteria = DetachedCriteria.For(typeof(Foo));

            criteria.Add(Restrictions.Like("Name", "Foo", MatchMode.Start));
            criteria.AddOrder(Order.Desc("Name"));
            criteria.AddOrder(Order.Asc("BirthDate"));
            using (ISession session = OpenSession())
            {
                ICriteria icriteria = criteria.GetExecutableCriteria(session);
                icriteria.SetFirstResult(0);
                icriteria.SetMaxResults(2);
                Assert.That(2, Is.EqualTo((await(icriteria.ListAsync <Foo>())).Count));
            }

            using (ISession session = OpenSession())
                using (ITransaction t = session.BeginTransaction())
                {
                    await(session.DeleteAsync("from Foo"));
                    await(t.CommitAsync());
                }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Executes the query.
        /// </summary>
        /// <param name="session">The <c>NHibernate</c>'s <see cref="ISession"/></param>
        /// <returns><c>System.Int32</c> as object</returns>
        protected override object InternalExecute(ISession session)
        {
            if (detachedCriteria != null)
            {
                ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);

                criteria.SetProjection(Projections.RowCount());

                Int32 count = Convert.ToInt32(criteria.UniqueResult());

                // clear the projection, so our caller can re-use the DetachedCriteria
                criteria.SetProjection(new IProjection[] { null });

                return(count);
            }
            else if (criterias != null)
            {
                ICriteria criteria = session.CreateCriteria(RootType);

                CriteriaHelper.AddCriterionToCriteria(criteria, criterias);

                criteria.SetProjection(Projections.RowCount());

                return(Convert.ToInt32(criteria.UniqueResult()));
            }
            else
            {
                return(Convert.ToInt32(base.CreateQuery(session).UniqueResult()));
            }
        }
Exemplo n.º 6
0
        public List <T> Find <T>()
        {
            var criteria = DetachedCriteria.For <T>()
                           .CreateAlias("HomeRegion", "hr");

            if (!String.IsNullOrEmpty(SearchText))
            {
                criteria.Add(Expression.Like("Name", SearchText, MatchMode.Anywhere));
            }

            DetachedCriteria countSubquery = NHibernate.CriteriaTransformer.TransformToRowCount(criteria);

            _lastRowsCount = ArHelper.WithSession <int>(
                s => countSubquery.GetExecutableCriteria(s).UniqueResult <int>());

            criteria.AddOrder(Order.Asc("Name"));
            criteria.AddOrder(Order.Asc("hr.Name"));

            if (CurrentPage > 0)
            {
                criteria.SetFirstResult(CurrentPage * PageSize);
            }

            criteria.SetMaxResults(PageSize);

            var list = ArHelper.WithSession(
                s => criteria.GetExecutableCriteria(s).List <T>())
                       .ToList();

            return(list);
        }
Exemplo n.º 7
0
        /// <summary> Create a query (ICriteria) </summary>
        public ICriteria CreateCountQuery(DetachedCriteria detachedCriteria)
        {
            ICriteria executableCriteria = detachedCriteria.GetExecutableCriteria(_session);

            executableCriteria.ClearOrders();
            return(executableCriteria.SetFirstResult(0).SetProjection(Projections.RowCount()));
        }
Exemplo n.º 8
0
        public IList <T> get_with_criteria <T>(DetachedCriteria detachedCriteria)
        {
            if (detachedCriteria == null)
            {
                Log.bound_to(this).log_a_warning_event_containing("Please ensure you send in a criteria when you want to limit records. Otherwise please consider using GetAll(). Returning empty list.");
                return(null);
            }

            IList <T> list;

            bool not_running_outside_session = session == null;

            if (not_running_outside_session)
            {
                start(false);
            }

            ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);

            list = criteria.List <T>();

            if (not_running_outside_session)
            {
                finish();
            }

            Log.bound_to(this).log_a_debug_event_containing("Repository found {0} records of type {1} with criteria {2}.", list.Count, typeof(T).Name, detachedCriteria.ToString());

            return(list);
        }
Exemplo n.º 9
0
 public void DeleteAll(DetachedCriteria criteria)
 {
     foreach (Entity entity in criteria.GetExecutableCriteria(_session).List())
     {
         _session.Update(entity.Delete());
     }
 }
Exemplo n.º 10
0
        public IList <T> get_transformation_with_criteria <T>(DetachedCriteria detachedCriteria)
        {
            if (detachedCriteria == null)
            {
                Log.bound_to(this).log_a_warning_event_containing("Please ensure you send in a criteria when you want to get transformed records. Otherwise please consider using GetAll(). Returning empty list.");
                return(null);
            }

            IList <T> list;

            bool running_long_session = session == null;

            if (!running_long_session)
            {
                start(false);
            }

            ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);

            list = criteria
                   .SetResultTransformer(new AliasToBeanResultTransformer(typeof(T)))
                   .List <T>();

            if (!running_long_session)
            {
                finish();
            }

            Log.bound_to(this).log_a_debug_event_containing("Repository found {0} records of type {1} with criteria {2}.", list.Count, typeof(T).Name, detachedCriteria.ToString());

            return(list);
        }
Exemplo n.º 11
0
        public int GetCount <T>() where T : DomainEntity
        {
            DetachedCriteria q = DetachedCriteria.For(typeof(T));

            q.SetProjection(Projections.Count("Id"));
            return(q.GetExecutableCriteria(Session).UniqueResult <int>());
        }
        public void WillReturnNothingIfOperationNotDefined_WithDetachedCriteria()
        {
            DetachedCriteria detachedCriteria = DetachedCriteria.For <Account>();

            authorizationService.AddPermissionsToQuery(user, "/Account/Delete", detachedCriteria);
            Assert.Empty(detachedCriteria.GetExecutableCriteria(session).List());
        }
Exemplo n.º 13
0
        public void AggregatingHirearchyWithCount()
        {
            var root = new Key {
                Id = 1, Area = 2
            };

            DetachedCriteria projection = DetachedCriteria.For <TreeNode>("child")
                                          .Add(Restrictions.Eq("Parent.id", root))
                                          .Add(Restrictions.Gt("Key.Id", 0))
                                          .Add(Restrictions.Eq("Type", NodeType.Blue))
                                          .CreateAlias("DirectChildren", "grandchild")
                                          .SetProjection(
                Projections.ProjectionList()
                .Add(Projections.GroupProperty("child.Key.Id"))
                .Add(Projections.GroupProperty("child.Key.Area"))
                .Add(Projections.Count(Projections.Property("grandchild.Key.Id")))
                );

            using (var s = sessions.OpenSession())
                using (var tx = s.BeginTransaction())
                {
                    var criteria = projection.GetExecutableCriteria(s);
                    var list     = criteria.List();
                    Assert.AreEqual(1, list.Count);
                    var tuple = (object[])list[0];
                    Assert.AreEqual(11, tuple[0]);
                    Assert.AreEqual(2, tuple[1]);
                    Assert.AreEqual(1, tuple[2]);
                    tx.Commit();
                }
        }
Exemplo n.º 14
0
 protected void DeleteAll(DetachedCriteria criteria)
 {
     foreach (var entity in criteria.GetExecutableCriteria(_session).List <TEntity>())
     {
         _session.Delete(entity);
     }
 }
Exemplo n.º 15
0
        public void ProdsWDate()
        {
            ISession session = GetConfiguration().BuildSessionFactory().OpenSession();

            Category category = new Category()
            {
                Id = 1
            };

            DetachedCriteria criteria = DetachedCriteria.For <Income>();

            criteria.CreateAlias("Product", "p");
            criteria.CreateAlias("p.Category", "c");
            criteria.SetProjection(
                Projections.ProjectionList()
                .Add(Projections.GroupProperty("Product"))
                .Add(Projections.GroupProperty("c.Name"))
                .Add(Projections.Max("Date")));
            //criteria.Add(Restrictions.Eq("p.Category", category));
            criteria.AddOrder(NHibernate.Criterion.Order.Asc("c.Name"));
            var list = criteria.GetExecutableCriteria(session).List();

            foreach (var VARIABLE in list)
            {
            }
        }
        public void WillReturnNothingForUsersGroupIfOperationNotDefined_WithDetachedCriteria()
        {
            UsersGroup       usersgroup       = authorizationRepository.GetUsersGroupByName("Administrators");
            DetachedCriteria detachedCriteria = DetachedCriteria.For <Account>();

            authorizationService.AddPermissionsToQuery(usersgroup, "/Account/Delete", detachedCriteria);
            Assert.Empty(detachedCriteria.GetExecutableCriteria(session).List());
        }
Exemplo n.º 17
0
        public IList <TEntity> FindAll(DetachedCriteria criteria, params Order[] orders)
        {
            var executableCriteria = criteria.GetExecutableCriteria(_session);

            Array.ForEach(orders, order => executableCriteria.AddOrder(order));

            return(executableCriteria.List <TEntity>());
        }
Exemplo n.º 18
0
 /// <summary>
 /// Get all objects of T that match the given criteria.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="criteria">NHibernate DetachedCriteria instance.</param>
 /// <returns></returns>
 /// <remarks>
 /// Be careful to not use this one from the UI layer beacuse it ties the UI to NHibernate.
 /// </remarks>
 public IList <T> GetAllByCriteria <T>(DetachedCriteria criteria)
 {
     using (ISession session = SessionFactory.OpenSession(_AssemblyName))
     {
         ICriteria crit = criteria.GetExecutableCriteria(session);
         return(crit.List <T>());
     }
 }
Exemplo n.º 19
0
        public long Count(DetachedCriteria criteria)
        {
            var executableCriteria = criteria.GetExecutableCriteria(_session);

            var count = executableCriteria.SetProjection(Projections.RowCount()).UniqueResult();

            return(Convert.ToInt64(count));
        }
Exemplo n.º 20
0
 public T GetUniqueByCriteria(DetachedCriteria aCriteria)
 {
     using (var session = SessionFactory.OpenSession()) {
         ICriteria criteria = aCriteria.GetExecutableCriteria(session.SessionImpl);
         criteria.Add(Expression.Eq("IsDelete", false));
         return(criteria.UniqueResult <T>());
     }
 }
Exemplo n.º 21
0
        /// <summary>
        /// 動態查詢
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="detachedcriteria">搜尋條件</param>
        /// <returns>搜尋結果</returns>
        public IList <T> SearchByDetachedCriteria <T>(DetachedCriteria detachedcriteria)
        {
            ISession session = HibernateTemplate.SessionFactory.GetCurrentSession();
            //ISession session = NHibernateHelper.GetCurrentSession();
            ICriteria criteria = detachedcriteria.GetExecutableCriteria(session);

            return(criteria.List <T>());
        }
Exemplo n.º 22
0
 /// <summary>
 /// Get all objects of T that match the given criteria.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="criteria">NHibernate DetachedCriteria instance.</param>
 /// <returns></returns>
 /// <remarks>
 /// Be careful to not use this one from the UI layer beacuse it ties the UI to NHibernate.
 /// </remarks>
 public IList <T> GetAllByCriteria <T>(DetachedCriteria criteria)
 {
     using (ISession session = this._sessionManager.OpenSession())
     {
         ICriteria crit = criteria.GetExecutableCriteria(session);
         return(crit.List <T>());
     }
 }
Exemplo n.º 23
0
        public int Count(DetachedCriteria searchParameters)
        {
            var count = searchParameters.GetExecutableCriteria(session)
                        .SetProjection(Projections.RowCount())
                        .FutureValue <int>();

            return(count.Value);
        }
Exemplo n.º 24
0
        public IList <T> FindAll <T>(DetachedCriteria criteria, int firstRow, int maxRows)
        {
            ICriteria c = criteria.GetExecutableCriteria(GetSession());

            c.SetFirstResult(firstRow);
            c.SetMaxResults(maxRows);
            return(c.List <T>());
        }
Exemplo n.º 25
0
        public T FindByFieldScalarOrThrow <T>(string name, object value) where T : DomainEntity
        {
            DetachedCriteria q = DetachedCriteria.For(typeof(T));

            q.Add(Restrictions.Eq(name, value));
            IList <T> list = q.GetExecutableCriteria(Session).List <T>();

            return(getScalarResult(list));
        }
Exemplo n.º 26
0
        /// <summary>
        /// 執行預先定義好的DetachedCriteria並傳回一筆資料
        /// </summary>
        /// <typeparam name="T">轉型型別</typeparam>
        /// <param name="detachedcriteria">預先準備好的條件</param>
        /// <returns></returns>
        public T GetVOByDetachedCriteria <T>(DetachedCriteria detachedcriteria)
        {
            ISession session = HibernateTemplate.SessionFactory.GetCurrentSession();
            //ISession session = NHibernateHelper.GetCurrentSession();
            ICriteria criteria = detachedcriteria.GetExecutableCriteria(session);

            criteria.SetMaxResults(1);
            return(criteria.UniqueResult <T>());
        }
Exemplo n.º 27
0
        public ICollection <T> FindAll(DetachedCriteria criteria, int firstResult, int numberOfResults)
        {
            ICriteria crit = criteria.GetExecutableCriteria(Uow.Session);

            crit.SetFirstResult(firstResult);
            crit.SetMaxResults(numberOfResults);

            return(crit.List <T> ());
        }
Exemplo n.º 28
0
        public IMultiCriteria Add <T>(string key, DetachedCriteria detachedCriteria)
        {
            ThrowIfKeyAlreadyExists(key);
            criteriaQueries.Add(detachedCriteria.GetExecutableCriteria(session));
            criteriaResultPositions.Add(key, criteriaQueries.Count - 1);
            resultCollectionGenericType.Add(typeof(T));

            return(this);
        }
Exemplo n.º 29
0
 public IList <T> GetByCriteria(DetachedCriteria aCriteria)
 {
     using (var session = SessionFactory.OpenSession()) {
         ICriteria criteria = aCriteria.GetExecutableCriteria(session.SessionImpl);
         criteria.Add(Expression.Eq("IsDelete", false));
         IList <T> rs = criteria.List <T>();
         return(rs);
     }
 }
Exemplo n.º 30
0
        public IMultiCriteria Add <T>(DetachedCriteria detachedCriteria)
        {
            criteriaQueries.Add(
                detachedCriteria.GetExecutableCriteria(session)
                );
            resultCollectionGenericType.Add(typeof(T));

            return(this);
        }
Exemplo n.º 31
0
		public IList Criteria(DetachedCriteria criteria)
		{
			return criteria.GetExecutableCriteria(session).List();
		}
Exemplo n.º 32
0
        /// <summary>
        /// Returns all instances found for the specified type according to the criteria
        /// </summary>
        /// <param name="targetType">The target type.</param>
        /// <param name="detachedCriteria">The criteria.</param>
        /// <param name="orders">An <see cref="Array"/> of <see cref="Order"/> objects.</param>
        /// <returns>The <see cref="Array"/> of results.</returns>
        protected internal static Array FindAll(Type targetType, DetachedCriteria detachedCriteria, params Order[] orders)
        {
            EnsureInitialized(targetType);

            ISession session = holder.CreateSession(targetType);

            try
            {
                ICriteria criteria = detachedCriteria.GetExecutableCriteria(session);

                AddOrdersToCriteria(criteria, orders);

                return SupportingUtils.BuildArray(targetType, criteria.List());
            }
            catch(ValidationException)
            {
                holder.FailSession(session);

                throw;
            }
            catch(Exception ex)
            {
                holder.FailSession(session);

                throw new ActiveRecordException("Could not perform FindAll for " + targetType.Name, ex);
            }
            finally
            {
                holder.ReleaseSession(session);
            }
        }
Exemplo n.º 33
0
        /// <summary>
        /// Returns a portion of the query results (sliced)
        /// </summary>
        /// <param name="targetType">The target type.</param>
        /// <param name="firstResult">The number of the first row to retrieve.</param>
        /// <param name="maxResults">The maximum number of results retrieved.</param>
        /// <param name="orders">An <see cref="Array"/> of <see cref="Order"/> objects.</param>
        /// <param name="criteria">The criteria expression</param>
        /// <returns>The sliced query results.</returns>
        protected internal static Array SlicedFindAll(Type targetType, int firstResult, int maxResults,
            Order[] orders, DetachedCriteria criteria)
        {
            EnsureInitialized(targetType);

            ISession session = holder.CreateSession(targetType);

            try
            {
                ICriteria executableCriteria = criteria.GetExecutableCriteria(session);
                AddOrdersToCriteria(executableCriteria, orders);
                executableCriteria.SetFirstResult(firstResult);
                executableCriteria.SetMaxResults(maxResults);

                return SupportingUtils.BuildArray(targetType, executableCriteria.List());
            }
            catch(ValidationException)
            {
                holder.FailSession(session);

                throw;
            }
            catch(Exception ex)
            {
                holder.FailSession(session);

                throw new ActiveRecordException("Could not perform SlicedFindAll for " + targetType.Name, ex);
            }
            finally
            {
                holder.ReleaseSession(session);
            }
        }
Exemplo n.º 34
0
 private void DeleteAll(DetachedCriteria criteria)
 {
     foreach (object entity in criteria.GetExecutableCriteria(applicationSession).List())
     {
         applicationSession.Delete(entity);
     }
 }
Exemplo n.º 35
0
		public IMultiCriteria Add(DetachedCriteria detachedCriteria)
		{
			criteriaQueries.Add(
				detachedCriteria.GetExecutableCriteria(session)
				);
			return this;
		}
Exemplo n.º 36
0
 public NHibernateCountQuery(DetachedCriteria criteria, ISession session)
 {
     executableCriteria = criteria.GetExecutableCriteria(session);
 }
Exemplo n.º 37
0
 private Permission FindResult(DetachedCriteria criteria)
 {
     Permission permission = criteria.GetExecutableCriteria(session)
         .SetCacheable(true).
         UniqueResult<Permission>();
     if (permission == null)
     {
         permission = new Permission();
         session.Save(permission);
     }
     return permission;
 }
Exemplo n.º 38
0
 private Permission[] FindResults(DetachedCriteria criteria)
 {
     ICollection<Permission> permissions = criteria.GetExecutableCriteria(session)
         .AddOrder(Order.Desc("Level"))
         .AddOrder(Order.Asc("Allow"))
         .SetCacheable(true)
         .List<Permission>();
     return permissions.ToArray();
 }