public static bool HasProxy(this ISession session, Object entity)
        {
            EntityEntry      oldEntry;
            IEntityPersister persister = GetEntityPersister(session, entity, out oldEntry);

            Object[] currentState = persister.GetPropertyValues(entity, session.GetSessionImplementation().EntityMode);

            foreach (var i in currentState)
            {
                // NHibernateUtil.IsInitialized
                if (NHibernateHelper.IsProxy(i))
                {
                    return(true);
                }
            }
            return(false);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="searchExpression"></param>
        /// <param name="searchOrders"></param>
        /// <param name="parentItem"></param>
        /// <returns></returns>
        public override System.Collections.IEnumerable GetData(ISearchExpression searchExpression, IList <ISearchOrder> searchOrders, object parentItem)
        {
            IList <T> list;
            var       child = parentItem as S;

            if (child != null && child.ParentEntity != null)
            {
                if (base.IsReload || NHibernateHelper.IsProxy(child.ParentEntity))
                {
                    //NHibernateHelper.Initialize(child.ParentEntity, child, reload);
                    //List<T> list = new List<T>();
                    //list.Add(child.ParentEntity);

                    using (var rep = new Repository(this.RepositoryCfgName))
                    {
                        rep.BeginTransaction();
                        //rep.Session.Lock(child, NHibernate.LockMode.None);
                        NHibernate.ICriteria criteria = rep.Session.CreateCriteria(typeof(T))
                                                        .Add(NHibernate.Criterion.Expression.IdEq(EntityScript.GetPropertyValue(child, TypedEntityMetadata.GenerateEntityInfo(rep.Session.SessionFactory, typeof(T)).IdName)));
                        OnCriteriaCreated(criteria);
                        list = criteria.List <T>();

                        rep.CommitTransaction();
                    }
                    if (list.Count > 0)
                    {
                        list[0].ChildEntity = child;
                        child.ParentEntity  = list[0];
                    }
                }
                else
                {
                    list = new List <T>();
                    list.Add(child.ParentEntity);
                }
            }
            else
            {
                list = new List <T>();
            }

            return(list);
        }
        ///// <summary>
        ///// 根据属性查找实体
        ///// </summary>
        ///// <typeparam name="T"></typeparam>
        ///// <param name="property"></param>
        ///// <param name="value"></param>
        ///// <returns></returns>
        //public T GetByProperty<T>(string property, object value)
        //{
        //    using (var tx = this.BeginTransaction())
        //    {
        //        StringBuilder hql = new StringBuilder();
        //        hql.Append(string.Format("FROM {0} a ", typeof(T).FullName));
        //        hql.Append(string.Format("WHERE a.{0} = ?", property));

        //        object obj = this.Session.CreateQuery(hql.ToString())
        //            .SetParameter(0, value)
        //            .UniqueResult();

        //        this.CommitTransaction();
        //        return (T)obj;
        //    }
        //}

        /// <summary>
        ///
        /// </summary>
        /// <param name="proxy"></param>
        /// <returns></returns>
        public bool IsProxy(object proxy)
        {
            return(NHibernateHelper.IsProxy(proxy));
        }