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