예제 #1
0
        /// <summary>
        /// Guarda un producto en la base de datos.
        /// </summary>
        /// <param name="producto">Producto a guardar.</param>
        public void GuardarProducto(ProductoModelo producto)
        {
            producto.ValidarProducto(verificarQueNoExista: true);

            using IDbConnection conexion = new SQLiteConnection(stringConexion);

            var q = @"insert into productos (Nombre, FechaCreacion, Descripcion)
                            values (@Nombre, strftime('%s', 'now'), @Descripcion)";

            var parametros = new { Nombre = producto.Nombre, Descripcion = producto.Descripcion };

            conexion.Execute(q, parametros);

            producto.Id = conexion.ExecuteScalar <int>("select max(Id) from Productos");

            if (producto.Categorias == null || producto.Categorias.Count < 1)
            {
                return;
            }

            producto.Categorias.ValidarCategorias();

            q = "insert into ProductoCategoria (ProductoId, CategoriaId) values (@ProductoId, @CategoriaId)";

            foreach (var categoria in producto.Categorias)
            {
                conexion.Execute(q, new { ProductoId = producto.Id, CategoriaId = categoria.Id });
            }
        }
예제 #2
0
        /// <summary>
        /// Edita un producto en la base de datos.
        /// </summary>
        /// <param name="producto">
        ///     El producto a editar. Las propiedades de este producto se usaran
        ///     para sobreescribir las columnas correspondientes
        ///     de la fila correspondiente en la base de datos dada por la propiedad producto.Id.
        /// </param>
        public void EditarProducto(ProductoModelo producto)
        {
            producto.ValidarProducto();

            using IDbConnection conexion = new SQLiteConnection(stringConexion);
            var q = @"update Productos set Nombre = @Nombre, Descripcion = @Descripcion where Id = @Id";

            var parametros = new { Nombre = producto.Nombre, Descripcion = producto.Descripcion, Id = producto.Id };

            conexion.Execute(q, parametros);

            if (producto.Categorias == null || producto.Categorias.Count < 1)
            {
                return;
            }

            producto.Categorias.ValidarCategorias();

            conexion.Open();
            using var transaccion = conexion.BeginTransaction();

            try
            {
                q = "delete from ProductoCategoria where ProductoId = @ProductoId";
                conexion.Execute(q, new { ProductoId = producto.Id });

                q = @"insert into ProductoCategoria (productoId, CategoriaId)
                                        values (@ProductoId, @CategoriaId)";

                foreach (var categoria in producto.Categorias)
                {
                    conexion.Execute(q, new { ProductoId = producto.Id, CategoriaId = categoria.Id });
                }

                transaccion.Commit();
            }
            catch
            {
                transaccion.Rollback();
                throw;
            }
        }