Exemple #1
0
        private void Load()
        {
            IClassMetadata classMetadata = m_sessionFactory.GetClassMetadata(m_persistentClass);

            if (classMetadata == null)
            {
                return;
            }

            Configuration conf            = NHibernateHelper.GetSessionFactoryManager().GetConfigurationBySessionFactory(m_sessionFactory);
            var           persistentClass = conf.GetClassMapping(m_persistentClass);

            m_idProperty   = persistentClass.GetProperty(classMetadata.IdentifierPropertyName);
            this.TableName = persistentClass.Table.Name;

            for (int i = 0; i < classMetadata.PropertyNames.Length; ++i)
            {
                string s = classMetadata.PropertyNames[i];
                NHibernate.Mapping.Property property = persistentClass.GetProperty(s);
                try
                {
                    var it = property.ColumnIterator.GetEnumerator();
                    it.MoveNext();
                    if (it.Current != null && it.Current is NHibernate.Mapping.Column)
                    {
                        int  length      = ((NHibernate.Mapping.Column)it.Current).Length;
                        bool nullability = classMetadata.PropertyNullability[i];
                        m_properties[s] = new EntityPropertyMetadata {
                            Name = s, Length = length, NotNull = !nullability
                        };
                    }
                }
                catch (System.InvalidOperationException)
                {
                }
            }

            //if (Attribute.IsDefined(m_persistentClass, typeof(NHibernate.Mapping.Attributes.ClassAttribute)))
            //{
            //    Attribute[] attrs = Attribute.GetCustomAttributes(m_persistentClass, typeof(NHibernate.Mapping.Attributes.ClassAttribute));
            //    if (attrs.Length > 0)
            //    {
            //        ClassAttribute attr = attrs[0] as ClassAttribute;
            //        m_tableName = attr.Table;
            //    }
            //}

            //m_propertyAttributes.Clear();
            //PropertyInfo[] pInfos = m_persistentClass.GetProperties();
            //foreach (PropertyInfo pInfo in pInfos)
            //{
            //    if (Attribute.IsDefined(pInfo, typeof(NHibernate.Mapping.Attributes.PropertyAttribute)))
            //    {
            //        Attribute[] attrs = Attribute.GetCustomAttributes(pInfo, typeof(NHibernate.Mapping.Attributes.PropertyAttribute));
            //        foreach(var i in attrs)
            //        {
            //            PropertyAttribute attr = i as PropertyAttribute;
            //            m_propertyAttributes.Add(attr.Name == null ? pInfo.Name : attr.Name, attr);
            //        }
            //    }
            //    else if (Attribute.IsDefined(pInfo, typeof(NHibernate.Mapping.Attributes.IdAttribute)))
            //    {
            //        Attribute[] attrs = Attribute.GetCustomAttributes(pInfo, typeof(NHibernate.Mapping.Attributes.IdAttribute));
            //        if (attrs.Length > 0)
            //        {
            //            m_idAttribute = attrs[0] as IdAttribute;
            //        }
            //    }
            //}
        }
        ///// <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));
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="proxy"></param>
 /// <param name="owner"></param>
 public void Initialize(object proxy, object owner)
 {
     NHibernateHelper.Initialize(proxy, owner, this.Session);
 }
        private string GetQueryWhere(ISearchExpression se, NHibernate.ISessionFactory sessionFactory, Dictionary <string, object> paramNames)
        {
            SimpleExpression cse = se as SimpleExpression;

            if (cse == null)
            {
                LogicalExpression le = se as LogicalExpression;

                string left  = GetQueryWhere(le.LeftHandSide, sessionFactory, paramNames);
                string right = GetQueryWhere(le.RightHandSide, sessionFactory, paramNames);

                switch (le.LogicOperator)
                {
                case LogicalOperator.And:
                    return("(" + left + " and " + right + ")");

                case LogicalOperator.Or:
                    return("(" + left + " or " + right + ")");

                case LogicalOperator.Not:
                    return("(not " + left + ")");

                default:
                    System.Diagnostics.Debug.Assert(false, "Not supported LogicOperator");
                    return(null);
                }
            }
            else
            {
                // Change Type
                if (!string.IsNullOrEmpty(cse.FullPropertyName))
                {
                    // Convert Data to dest type
                    bool hasC;
                    Type destType = NHibernateHelper.GetPropertyType(sessionFactory, typeof(T), cse.FullPropertyName, out hasC);
                    //hasCollection |= hasC;
                    IList array = cse.Values as IList;
                    if (array != null)
                    {
                        for (int i = 0; i < array.Count; ++i)
                        {
                            if (destType != array[i].GetType())
                            {
                                array[i] = ConvertHelper.ChangeType(array[i], destType);
                            }
                        }

                        //paramCnt += array.Count;
                    }
                    else
                    {
                        if (cse.Values != null)
                        {
                            if (destType != cse.Values.GetType())
                            {
                                cse.Values = ConvertHelper.ChangeType(cse.Values, destType);
                            }
                        }

                        //paramCnt++;
                    }
                }

                string propertyName = cse.FullPropertyName.Replace(":", ".");
                string paraName     = null;
                switch (cse.Operator)
                {
                case SimpleOperator.Eq:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " = " + ":" + paraName);

                case SimpleOperator.NotEq:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " != " + ":" + paraName);

                case SimpleOperator.EqProperty:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " = " + ":" + paraName);

                case SimpleOperator.Like:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = "%" + cse.Values + "%";
                    return(propertyName + " like " + ":" + paraName);

                case SimpleOperator.InG:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " in " + ":" + paraName);

                case SimpleOperator.IsNotNull:
                    return(propertyName + " is not null ");

                case SimpleOperator.IsNull:
                    return(propertyName + " is null ");

                case SimpleOperator.Gt:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " > " + ":" + paraName);

                case SimpleOperator.Lt:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " < " + ":" + paraName);

                case SimpleOperator.Ge:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " >= " + ":" + paraName);

                case SimpleOperator.Le:
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = cse.Values;
                    return(propertyName + " <= " + ":" + paraName);

                case SimpleOperator.GInG:
                {
                    IList data = cse.Values as IList;
                    // 当用于客户用途查找类型时,只能Like
                    StringBuilder sb = new StringBuilder();
                    sb.Append("(");
                    paraName             = CreateParamName(cse, paramNames);
                    paramNames[paraName] = "%" + data[0] + "%";
                    sb.Append(propertyName + " like " + ":" + paraName);
                    for (int i = 1; i < data.Count; ++i)
                    {
                        sb.Append(" or ");
                        paraName             = CreateParamName(cse, paramNames);
                        paramNames[paraName] = "%" + data[i] + "%";
                        sb.Append(propertyName + " like " + ":" + paraName);
                    }
                    sb.Append(")");
                    return(sb.ToString());
                }

                //case SimpleOperator.Any:
                //    return NHibernate.Criterion.Expression.EqProperty(propertyName, propertyName);
                //case SimpleOperator.Sql:
                //    return NHibernate.Criterion.Expression.Sql(propertyName);
                default:
                    System.Diagnostics.Debug.Assert(false, "Not supported SimpleOperator");
                    return(null);
                }
            }
        }