/// <summary>
        /// 生成下一个主键值
        /// </summary>
        /// <param name="Mapping"></param>
        /// <returns></returns>
        public Hashtable GeneratNextPrimaryKey(Draco.DB.ORM.Mapping.ITableMapping Mapping)
        {
            string TableName = Mapping.TableName;

            if (RequestCount == 0)
            {
                //第一次调用,确认表是否存在
                InitTable(TableName);
            }
            long   value = 1;
            string sql   = "select NextValue from ORM_SEQUENCE where  TableName='" + TableName + "'";
            object o     = m_IDBHandler.ExecuteScalar(sql);
            string uSQL  = "";

            if (o != null && o != DBNull.Value)
            {
                value = Convert.ToInt64(o);
                long next = value + 1;
                uSQL = " update ORM_SEQUENCE set NextValue=" + next + " where TableName='" + TableName + "'";
            }
            else
            {
                uSQL = "insert into ORM_SEQUENCE (TableName,NextValue)values('" + TableName + "',2)";
            }
            //回写下一个值
            m_IDBHandler.ExecuteNonQuery(uSQL);
            RequestCount++;

            Hashtable hash = new Hashtable();

            hash.Add(Mapping.PrimaryKeyCollection[0].PropertyName, value);
            return(hash);
        }
        /// <summary>
        /// 把DataSet填充到实体列表
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static List <T> LoadEntity <T>(DataSet ds, Type type) where T : AbstractEntity
        {
            if (ds == null || ds.Tables[0].Rows.Count == 0)
            {
                return(null);
            }
            //开始填充
            List <T> list = new List <T>();

            Draco.DB.ORM.Mapping.ITableMapping Mapping = ORMAdapterCreator.MappingManager.GetMapping(type);
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                //创建对象实例
                T instance = LoadEntity(row, type, Mapping) as T;
                list.Add(instance);
            }
            return(list);
        }
        /// <summary>
        /// 获取下一个主键值
        /// </summary>
        /// <param name="Mapping"></param>
        /// <returns></returns>
        public Hashtable GeneratNextPrimaryKey(Draco.DB.ORM.Mapping.ITableMapping Mapping)
        {
            if (Mapping == null)
            {
                throw new ArgumentNullException("GeneratNextPrimaryKey(Mapping)");
            }
            if (Mapping.PrimaryKeyCollection == null || Mapping.PrimaryKeyCollection.Count != 1)
            {
                throw new MappingException("Orale序列仅支持整形单主键,请修改映射配置文件");
            }
            long Sequence = GetSEQColumNextValueOra(Mapping.TableName);

            if (Sequence > 0)
            {
                Hashtable hash = new Hashtable();
                hash.Add(Mapping.PrimaryKeyCollection[0].PropertyName, Sequence);
                return(hash);
            }
            return(new Hashtable());
        }
        /// <summary>
        /// 加载一个实体对象数据
        /// </summary>
        /// <param name="dr"></param>
        /// <param name="type"></param>
        /// <param name="Mapping"></param>
        /// <returns></returns>
        public static AbstractEntity LoadEntity(DataRow dr, Type type, Draco.DB.ORM.Mapping.ITableMapping Mapping)
        {
            if (!type.IsSubclassOf(typeof(AbstractEntity)))
            {
                throw new ArgumentException(type.FullName + "不是实体类型");
            }
            AbstractEntity instance = type.Assembly.CreateInstance(type.FullName, false, BindingFlags.CreateInstance,
                                                                   Type.DefaultBinder, null, System.Globalization.CultureInfo.CurrentCulture, null) as AbstractEntity;

            foreach (FieldMapping f in Mapping.FieldMappingCollection)
            {
                PropertyInfo pInfo = type.GetProperty(f.PropertyName);
                object       value = dr[f.ColumnName];

                //设置
                if (value != DBNull.Value)
                {
                    object _value = Convert.ChangeType(value, pInfo.PropertyType);
                    pInfo.SetValue(instance, _value, null);
                }
            }
            foreach (FieldMapping f in Mapping.PrimaryKeyCollection)
            {
                PropertyInfo pInfo = type.GetProperty(f.PropertyName);
                object       value = dr[f.ColumnName];

                //设置
                if (value != DBNull.Value)
                {
                    object _value = Convert.ChangeType(value, pInfo.PropertyType);
                    pInfo.SetValue(instance, _value, null);
                }
            }
            instance.ClearChangedProperty();
            return(instance);
        }
 /// <summary>
 /// 构造
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="DbAdapter"></param>
 public ExpSQLBuilder(AbstractEntity entity, IORMAdapter DbAdapter)
 {
     m_DBAdapter = DbAdapter;
     m_Mapping   = ORMAdapterCreator.MappingManager.GetMapping(entity.GetType());
 }