protected string GetInsertSql(DbContext dbContext, Attribute.TableInnerAttribute table, object obj, bool fillParame = true) { Type type = obj.GetType(); var key = string.Format("{0}_{1}", type, fillParame); var helper = dbContext.DBHelper; var tableName = table.TableName; //var primaryKey = table.PrimaryKey; var typeArry = table.Fields; //var reflect = ReflectionHelper.GetInfo<T>(); string sql; var cached = insertSqlCache.TryGetValue(key, out sql); if (!cached) { sql = string.Format("insert into {0}(", KeyWordFormat(tableName)); } string sql1 = ""; string sql2 = ""; foreach (Attribute.FieldInnerAttribute info in typeArry) { string name = info.MapingName; if (info.IsPrimaryKey && !info.KeepIdentity && DBType != DBType.ORACLE) { continue; } object value = info.GetValue(obj); value = ObjectConvert.CheckNullValue(value, info.PropertyType); if (!cached) { sql1 += string.Format("{0},", FieldNameFormat(info)); if (fillParame) { var par = GetParamName(name, ""); sql2 += string.Format("{0},", par);//@{0} } } if (fillParame) { helper.AddParam(name, value); } } if (!cached) { sql1 = sql1.Substring(0, sql1.Length - 1) + ") values"; sql += sql1; if (fillParame) { sql2 = sql2.Substring(0, sql2.Length - 1); sql += "( " + sql2 + ")"; } //sql = SqlFormat(sql); insertSqlCache.TryAdd(key, sql); } return(sql); }
/// <summary> /// 检查字段 /// </summary> /// <param name="dbName"></param> /// <param name="table"></param> /// <param name="tableName"></param> /// <returns></returns> public List <Attribute.FieldInnerAttribute> CheckFieldExists(string dbName, Attribute.TableInnerAttribute table, string tableName) { tableName = tableName.ToLower(); var tb = GetTable(dbName, tableName); var returns = new List <Attribute.FieldInnerAttribute>(); if (tb.ColumnChecked) { return(returns); } var fields = table.Fields; if (tb.Fields.Count == 0)//首次不检查 { SaveTable(dbName, table, tableName); return(returns); } //检查字段是否一致 foreach (var item in fields) { //if (item.FieldType != Attribute.FieldType.数据库字段) // continue; if (!tb.Fields.Contains(item.MemberName.ToLower())) { returns.Add(item); } } tb.ColumnChecked = true; if (returns.Count > 0) { var fields2 = new List <string>(); fields.ForEach(b => { fields2.Add(b.MemberName.ToLower()); }); tb.Fields = fields2; Save(); } return(returns); }
/// <summary> /// 保存表字段 /// </summary> /// <param name="dbName"></param> /// <param name="table"></param> /// <param name="tableName"></param> public void SaveTable(string dbName, Attribute.TableInnerAttribute table, string tableName) { tableName = tableName.ToLower(); var fields = table.Fields; lock (lockObj) { var fields2 = new List <string>(); fields.ForEach(b => { fields2.Add(b.MemberName.ToLower()); }); var tb = new Table() { Name = tableName, Fields = fields2 }; var db = DataBase[dbName]; db.Tables.Remove(tableName); db.Tables.Add(tableName, tb); } Save(); }
public virtual string TableNameFormat(Attribute.TableInnerAttribute table) { return(table.TableName); }