/// <summary> /// 进行插入操作 /// </summary> /// <param name="obj">要插入的对象</param> /// <param name="fillIdentity">是否要填充刚插入的实体的ID</param> /// <returns></returns> protected internal int DoInsert(EntityBase obj, ValueSetList setList, bool fillIdentity) { StringBuilder sqlParams = new StringBuilder(1000); StringBuilder sqlValues = new StringBuilder(1000); ParamList list = new ParamList(); string param = null; string svalue = null; List <EntityPropertyInfo> identityInfo = new List <EntityPropertyInfo>(); KeyWordInfomation keyinfo = BQLValueItem.GetKeyInfo().Clone() as KeyWordInfomation; keyinfo.ParamList = list; foreach (EntityPropertyInfo info in EntityInfo.PropertyInfo) { //EntityPropertyInfo info = enums.Current.Value; object curValue = info.GetValue(obj); if (info.Identity) { if (info.SqlType == DbType.Guid && info.FieldType == DefaultType.GUIDType) { curValue = Guid.NewGuid(); info.SetValue(obj, curValue); DBParameter prm = list.NewParameter(info.SqlType, curValue, EntityInfo.DBInfo); sqlParams.Append(","); sqlParams.Append(EntityInfo.DBInfo.CurrentDbAdapter.FormatParam(info.ParamName)); sqlValues.Append(","); sqlValues.Append(prm.ValueName); continue; } else { if (fillIdentity) { identityInfo.Add(info); } param = EntityInfo.DBInfo.CurrentDbAdapter.GetIdentityParamName(info); if (!string.IsNullOrEmpty(param)) { sqlParams.Append(","); sqlParams.Append(param); } svalue = EntityInfo.DBInfo.CurrentDbAdapter.GetIdentityParamValue(EntityInfo, info); if (!string.IsNullOrEmpty(svalue)) { sqlValues.Append(","); sqlValues.Append(svalue); } continue; } } else if (info.IsVersion) //版本初始值 { object conValue = curValue; if (conValue == null) { conValue = GetDefaultConcurrency(info); } if (conValue != null) { DBParameter prm = list.NewParameter(info.SqlType, conValue, EntityInfo.DBInfo); sqlParams.Append(","); sqlParams.Append(EntityInfo.DBInfo.CurrentDbAdapter.FormatParam(info.ParamName)); sqlValues.Append(","); sqlValues.Append(prm.ValueName); continue; } } else { BQLValueItem bvalue = null; if (setList != null && setList.TryGetValue(info.PropertyName, out bvalue)) { sqlParams.Append(","); sqlParams.Append(EntityInfo.DBInfo.CurrentDbAdapter.FormatParam(info.ParamName)); sqlValues.Append(","); sqlValues.Append(bvalue.DisplayValue(keyinfo)); continue; } else if (curValue == null) { continue; } else { DBParameter prmValue = list.NewParameter(info.SqlType, curValue, EntityInfo.DBInfo); sqlParams.Append(","); sqlParams.Append(EntityInfo.DBInfo.CurrentDbAdapter.FormatParam(info.ParamName)); sqlValues.Append(","); sqlValues.Append(prmValue.ValueName); } } } if (sqlParams.Length > 0) { sqlParams.Remove(0, 1); } else { return(0); } if (sqlValues.Length > 0) { sqlValues.Remove(0, 1); } else { return(0); } InsertCondition con = new InsertCondition(EntityInfo.DBInfo); con.Tables.Append(EntityInfo.DBInfo.CurrentDbAdapter.FormatTableName(EntityInfo.TableName)); con.SqlParams.Append(sqlParams.ToString()); con.SqlValues.Append(sqlValues.ToString()); int ret = -1; con.DbParamList = list; using (BatchAction ba = _oper.StarBatchAction()) { string sql = con.GetSql(true); Dictionary <string, bool> cacheTables = null; cacheTables = _oper.DBInfo.QueryCache.CreateMap(EntityInfo.TableName); ret = ExecuteCommand(sql, list, CommandType.Text, cacheTables); if (identityInfo.Count > 0 && fillIdentity) { foreach (EntityPropertyInfo pkInfo in identityInfo) { sql = EntityInfo.DBInfo.CurrentDbAdapter.GetIdentitySQL(pkInfo); using (IDataReader reader = _oper.Query(sql, new ParamList(), null)) { if (reader.Read()) { if (!reader.IsDBNull(0)) { EntityInfo.DBInfo.CurrentDbAdapter.SetObjectValueFromReader(reader, 0, obj, pkInfo, !pkInfo.TypeEqual(reader, 0)); //obj.PrimaryKeyChange(); ret = 1; } } } } } } return(ret); }