Ejemplo n.º 1
0
        public static FormattedUpdateProperties BuildSqlForUpdate(ITable table, List <string> fieldsToIgnore = null)
        {
            FormattedUpdateProperties formattedProperties = new FormattedUpdateProperties();

            var type = table.GetType();
            //Can't save primarky keys.

            List <PropertyInfo> tableProperties;

            tableProperties = fieldsToIgnore == null?
                              type.GetSqlPropertyInfo().Where(i => i.GetCustomAttribute <PrimaryKeyAttribute>() == null).ToList() :
                                  type.GetSqlPropertyInfo().Where(i => i.GetCustomAttribute <PrimaryKeyAttribute>() == null && fieldsToIgnore.All(p => i.Name != p)).ToList();

            Dictionary <string, object>    parameters        = new Dictionary <string, object>();
            List <Tuple <string, string> > fieldParameterMap = new List <Tuple <string, string> >();

            foreach (var tableProperty in tableProperties)
            {
                var parameterName = $"@{tableProperty.Name}_parm";
                parameters.Add(parameterName, tableProperty.GetValue(table));
                fieldParameterMap.Add(new Tuple <string, string>(tableProperty.Name, parameterName));
            }


            formattedProperties.UpdateStatement = string.Join(",",
                                                              fieldParameterMap.Select(i => $"[{i.Item1}]={i.Item2}"));

            formattedProperties.Parameters = parameters;
            return(formattedProperties);
        }
Ejemplo n.º 2
0
        public static SqlStatement GenerateUpdateStatement <TTable>(dynamic objectToUpdate,
                                                                    Expression <Func <TTable, bool> > where) where TTable : ITable
        {
            var tableType           = typeof(TTable);
            ExpressionParser parser = new ExpressionParser();

            SqlStatement sqlStatement = new SqlStatement();

            FormattedUpdateProperties updateInfo = TypeParser.ParseDynamicForUpdate(objectToUpdate);

            var parsedWhereExpression = parser.ParseCompareFunction(where);

            sqlStatement.Statement  = $"update {tableType.GetName()} set {updateInfo.UpdateStatement} {(string.IsNullOrEmpty(parsedWhereExpression.SqlStatement) ? string.Empty : "where " + parsedWhereExpression.SqlStatement)}";
            sqlStatement.Parameters = updateInfo.Parameters.ToDynamicParameters(parsedWhereExpression.Parameters);
            return(sqlStatement);
        }
Ejemplo n.º 3
0
        public static FormattedUpdateProperties ParseDynamicForUpdate(dynamic objectToUpdate)
        {
            FormattedUpdateProperties formattedProperties = new FormattedUpdateProperties();

            Type tableType = objectToUpdate.GetType();
            List <PropertyInfo>            tableProperties   = tableType.GetSqlPropertyInfo();
            Dictionary <string, object>    parameters        = new Dictionary <string, object>();
            List <Tuple <string, string> > fieldParameterMap = new List <Tuple <string, string> >();

            foreach (var tableProperty in tableProperties)
            {
                var parameterName = $"@{tableProperty.Name}_parm";
                parameters.Add(parameterName, tableProperty.GetValue(objectToUpdate));
                fieldParameterMap.Add(new Tuple <string, string>(tableProperty.Name, parameterName));
            }


            formattedProperties.UpdateStatement = string.Join(",",
                                                              fieldParameterMap.Select(i => $"[{i.Item1}]={i.Item2}"));

            formattedProperties.Parameters = parameters;
            return(formattedProperties);
        }