Example #1
0
        /// <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);
        }