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