Exemplo n.º 1
0
        /// <summary>
        /// 创建主键
        /// </summary>
        /// <param name="Generator"></param>
        public virtual void CreatePrimaryKey(IPKGenerator Generator)
        {
            AbstractEntity Entity = m_Entity as AbstractEntity;

            //创建主键
            if (Generator == null)
            {
                throw new MappingException("创建主键生成器失败,主键生成器必须实现Draco.DB.ORM.AutoSQL.PKGenerator.IPKGenerator接口,请检查映射文件中主键生成器的配置信息!");
            }
            Hashtable Next = Generator.GeneratNextPrimaryKey(m_Mapping);

            if (Next != null && Next.Count > 0)
            {
                foreach (string PropertyName in Next.Keys)
                {
                    object       NextValue = Next[PropertyName];
                    PropertyInfo Property  = Entity.GetType().GetProperty(PropertyName);
                    if (Property != null)
                    {
                        object _value = Convert.ChangeType(NextValue, Property.PropertyType);
                        Property.SetValue(Entity, _value, null);
                    }
                }
            }
        }
        /// <summary>
        /// 插入记录
        /// </summary>
        /// <returns></returns>
        public int Insert()
        {
            string SQL = "";

            IDataParameter[] paras = null;
            if (!m_SQLBuilder.CheckePrimaryKey())
            {
                //没有设定主键,就先确认主键
                IPKGenerator Generator = m_SQLBuilder.CreatePKGenerator(m_Handle);
                m_SQLBuilder.CreatePrimaryKey(Generator);
            }
            SQL = m_SQLBuilder.CreateInsertSQL(out paras);
            ToLogout(SQL, paras);
            int i = m_Handle.ExecuteNonQuery(SQL, paras);

            m_SQLBuilder.ProcessOutputParameters(paras);
            return(i);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 获取主键生成器
        /// </summary>
        /// <param name="PKGeneratorName">主键生成器名称</param>
        /// <param name="DbHandle"></param>
        /// <returns></returns>
        public static IPKGenerator GetPKGenerator(string PKGeneratorName, IDataBaseHandler DbHandle)
        {
            if (String.IsNullOrEmpty(PKGeneratorName))
            {
                throw new ArgumentNullException("PKGeneratorName can not be empty!");
            }
            if (m_PKGTable.ContainsKey(PKGeneratorName))
            {
                IPKGenerator PKG = m_PKGTable[PKGeneratorName] as IPKGenerator;
                if (PKG != null && PKG.IsReusable)
                {
                    return(PKG);
                }
            }
            IPKGenerator NewPKG = CreatePKGenerator(PKGeneratorName, DbHandle);

            m_PKGTable[PKGeneratorName] = NewPKG;
            return(NewPKG);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 构建主键生成器
        /// </summary>
        /// <param name="DbHandle"></param>
        /// <returns></returns>
        public virtual IPKGenerator CreatePKGenerator(IDataBaseHandler DbHandle)
        {
            if (String.IsNullOrEmpty(m_Mapping.Generator))
            {
                throw new MappingException("主键生成器配置为空,请检查映射文件中主键生成器的配置信息!");
            }
            IPKGenerator Generator = null;

            try
            {
                Generator = PKGeneratorFactory.GetPKGenerator(m_Mapping.Generator, DbHandle);
            }
            catch (Exception ex)
            {
                throw new MappingException("创建主键生成器失败,请检查映射文件中主键生成器的配置信息!详细信息:" + ex.ToString());
            }
            if (Generator == null)
            {
                throw new MappingException("创建主键生成器失败,主键生成器必须实现Draco.DB.ORM.PKGenerator.IPKGenerator接口,请检查映射文件中主键生成器的配置信息!");
            }
            return(Generator);
        }