Esempio n. 1
0
        protected void SetMassiveOperationParameters <T>(IEnumerable <T> obj, TransactionTypes transactionType, QueryOptions queryOptions) where T : Cope <T>, IManageable, new()
        {
            Logger.Info(string.Format("Setting parameters in command based massive operation transaction type {1}.", typeof(T), transactionType.ToString()));

            MassiveOperationParameter parameters = DataSerializer.GenerateCompatibleMassiveOperationXML(obj, transactionType);

            _command.Parameters.Add(CreateDbParameter("_xmlValues", parameters.XmlValues));
            _command.Parameters.Add(CreateDbParameter("_xmlNames", parameters.XmlNames));
            _command.Parameters.Add(CreateDbParameter("_procedureName", parameters.ProcedureName));
        }
Esempio n. 2
0
        internal static MassiveOperationParameter GenerateCompatibleMassiveOperationXML <T>(IEnumerable <T> list, TransactionTypes transactionType) where T : Cope <T>, IManageable, new()
        {
            MassiveOperationParameter massiveOperationParameter = new MassiveOperationParameter();
            StringBuilder             builder = new StringBuilder();

            builder.Append("<columns>\n");
            if (transactionType == TransactionTypes.DeleteMassive)
            {
                builder.Append("  <column>\n");
                builder.Append($"      <name>{Cope<T>.ModelComposition.PrimaryKeyProperty.Name}</name>\n");
                builder.Append("  </column>\n");
            }
            else
            {
                foreach (KeyValuePair <string, PropertyInfo> property in Cope <T> .ModelComposition.FilteredProperties)
                {
                    builder.Append("  <column>\n");
                    builder.Append($"      <name>{property.Value.Name}</name>\n");
                    builder.Append("  </column>\n");
                }
            }
            builder.Append("</columns>");
            massiveOperationParameter.XmlNames = builder.ToString();

            builder.Clear();

            builder.Append("<objects>\n");
            if (transactionType == TransactionTypes.DeleteMassive)
            {
                foreach (T obj in list)
                {
                    builder.Append("  <object>\n");
                    // Si es Numero o Boolean no agrega comillas sencillas, de lo contrario se las pone.
                    if (long.TryParse(Cope <T> .ModelComposition.PrimaryKeyProperty.GetValue(obj).ToString(), out long n) || Cope <T> .ModelComposition.PrimaryKeyProperty.GetValue(obj) is bool)
                    {
                        builder.Append($"     <{Cope<T>.ModelComposition.PrimaryKeyProperty.Name}>{Cope<T>.ModelComposition.PrimaryKeyProperty.GetValue(obj)}</{Cope<T>.ModelComposition.PrimaryKeyProperty.Name}>\n");
                    }
                    else
                    {
                        builder.Append($"     <{Cope<T>.ModelComposition.PrimaryKeyProperty.Name}>'{Cope<T>.ModelComposition.PrimaryKeyProperty.GetValue(obj)}'</{Cope<T>.ModelComposition.PrimaryKeyProperty.Name}>\n");
                    }
                    builder.Append("  </object>\n");
                }
            }
            else
            {
                foreach (T obj in list)
                {
                    builder.Append("  <object>\n");
                    foreach (KeyValuePair <string, PropertyInfo> property in Cope <T> .ModelComposition.FilteredProperties)
                    {
                        if (property.Value.GetValue(obj) == null)
                        {
                            builder.Append($"     <{property.Value.Name}>{DBNull.Value}</{property.Value.Name}>\n");
                        }
                        else
                        {
                            // Si es Numero o Boolean no agrega comillas sencillas, de lo contrario se las pone.
                            if (long.TryParse(property.Value.GetValue(obj).ToString(), out long n) || property.Value.GetValue(obj) is bool)
                            {
                                builder.Append($"     <{property.Value.Name}>{property.Value.GetValue(obj)}</{property.Value.Name}>\n");
                            }
                            else
                            {
                                if (property.Value.GetValue(obj) is DateTime)
                                {
                                    builder.Append($"     <{property.Value.Name}>'{((DateTime)property.Value.GetValue(obj)).ToString("yyyy-MM-dd H:mm:ss")}'</{property.Value.Name}>\n");
                                }
                                else
                                {
                                    builder.Append($"     <{property.Value.Name}>'{property.Value.GetValue(obj)}'</{property.Value.Name}>\n");
                                }
                            }
                        }
                    }
                    builder.Append("  </object>\n");
                }
            }

            builder.Append("</objects>");

            massiveOperationParameter.XmlValues = builder.ToString();
            switch (transactionType)
            {
            case TransactionTypes.InsertMassive:
                massiveOperationParameter.ProcedureName = Manager.ConnectionType == ConnectionTypes.MySQL ? $"`{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{Manager.InsertSuffix}`" : $"[{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{Manager.InsertSuffix}]";
                break;

            case TransactionTypes.UpdateMassive:
                massiveOperationParameter.ProcedureName = Manager.ConnectionType == ConnectionTypes.MySQL ? $"`{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{Manager.UpdateSuffix}`" : $"[{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{Manager.UpdateSuffix}]";
                break;

            case TransactionTypes.DeleteMassive:
                massiveOperationParameter.ProcedureName = Manager.ConnectionType == ConnectionTypes.MySQL ? $"`{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{Manager.DeleteSuffix}`" : $"[{Manager.StoredProcedurePrefix}{Cope<T>.ModelComposition.TableName}{Manager.DeleteSuffix}]";
                break;

            default:
                throw new NotSupportedException($"El tipo de transaccion {transactionType.ToString()} no puede ser utilizado con la funcion {nameof(GenerateCompatibleMassiveOperationXML)}.");
            }

            return(massiveOperationParameter);
        }