/// <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 }); } }
/// <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; } }