/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ob"></param> /// <returns></returns> /// <remarks> /// 2013.8.7</remarks> public System.Data.IDbCommand GenerateSaveSql <T>(T ob) { if (!updateCommand.ContainsKey(typeof(T))) { //初始化一个Command System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(); var TargetType = typeof(T); //得到表名 var factory = new MSSQLScriptSqlPatternFactory();//.GetTable(TargetType); var table = helper.GetTableAttribute(TargetType); String TableName = helper.GetTable(TargetType); var Properties = TargetType.GetProperties(); String Cols = ""; for (int i = 0; i < Properties.Length; i++) { var attribute = helper.GetColNameAttributes(Properties[i]); string ColName = ""; if (attribute.Count > 0) { for (int j = 0; j < attribute.Count; j++) { var Col = (ColumnAttribute)attribute[j]; if (Col.IsAutoGenerate != GenerationType.Never || Col.NoMap == true || Col.IsIdentify) { continue; //如果自动生成 } else { ColName = helper.GetColName(Col, Properties[i]); } String paramName = "@" + ColName; // ColName = factory.GetColName(Col, Properties[i]); var dbValue = new ORMHelper().GetDbObject(Properties[i], ob, Col.PropertyName); // if (dbValue != null) // { Cols += "[" + ColName + "]=" + paramName + ","; command.Parameters.Add(new System.Data.SqlClient.SqlParameter(paramName, dbValue ?? "")); } } } var parity = new MSSQLScriptSqlPatternFactory().GetExistSql <T>(Properties, ob, true, "Pre"); command.Parameters.AddRange(parity.Params.ToArray()); command.CommandText = "Update " + TableName + " SET " + Cols.Substring(0, Cols.Length - 1) + " WHERE " + parity.SqlScript; updateCommand.Add(typeof(T), command); } var upatecommand = (updateCommand[typeof(T)] as SqlCommand).Clone(); SetValues <T>(ob, upatecommand); SetValues <T>(ob, upatecommand, "Pre"); // + " SET " + Cols.Substring(0, Cols.Length - 1) + " WHERE " + parity.SqlScript; return(upatecommand); }