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)); }