<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Verónica Guamán</title>
    <description>The latest articles on DEV Community by Verónica Guamán (@veronicaguamann).</description>
    <link>https://dev.to/veronicaguamann</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F561104%2F2d26d7fc-d60d-4600-bc70-ebfe541325fa.jpg</url>
      <title>DEV Community: Verónica Guamán</title>
      <link>https://dev.to/veronicaguamann</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/veronicaguamann"/>
    <language>en</language>
    <item>
      <title>Invocar un flujo dentro de otro flujo en Azure Logic Apps</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Tue, 26 Mar 2024 14:48:05 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/invocar-un-flujo-dentro-de-otro-flujo-de-azure-logic-apps-5c33</link>
      <guid>https://dev.to/veronicaguamann/invocar-un-flujo-dentro-de-otro-flujo-de-azure-logic-apps-5c33</guid>
      <description>&lt;p&gt;En este corto artículo te mostraré cómo puedes llamar a un flujo de Logic apps dentro de un flujo en el mismo recurso.&lt;/p&gt;

&lt;p&gt;Aquí te cuento mi pequeña hazaña, era relativamente nueva en Azure Logic Apps y necesitaba invocar a un flujo dentro de otro flujo, los dos estaban en el mismo recurso, conocía la acción de &lt;strong&gt;&lt;em&gt;HTTP&lt;/em&gt;&lt;/strong&gt; y traté de conectarme mediante el URL que general el flujo de Logic apps pero no funcionaba, leí investigué pero no encontré la solución, hasta que encontré un componente que me sonaba "&lt;strong&gt;&lt;em&gt;Invoke a workflow in this workflow app&lt;/em&gt;&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;¡&lt;strong&gt;Eureka&lt;/strong&gt;! Fue la solución a mi problema.&lt;/p&gt;

&lt;p&gt;A continuación, te muestro como usarlo:&lt;br&gt;
Agrega una acción a tu flujo actual.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2fyailk6gtsbvc1vn54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2fyailk6gtsbvc1vn54.png" alt="Image description" width="234" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al seleccionar "&lt;strong&gt;&lt;em&gt;Agregar una acción&lt;/em&gt;&lt;/strong&gt;" te mostrará las diferentes acciones disponibles, puedes colocar "invoke" en el buscador para encontrarlo fácilmente&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgz8jek7mrddrswmzki7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgz8jek7mrddrswmzki7.png" alt="Image description" width="549" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo seleccionas, y ya podemos utilizarlo, en la sección de &lt;strong&gt;Workflow Name&lt;/strong&gt; se muestra la lista de todos los flujos que tienes actualmente en tu recurso de Logic Apps, debes elegir el que necesitas.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F161omdcyqb82cwrzof1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F161omdcyqb82cwrzof1f.png" alt="Image description" width="548" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el caso de que se requiera algo adicional podemos seleccionar las siguientes opciones en &lt;strong&gt;Parametros avanzados&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa63j3aq49qynvdhmp3ug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa63j3aq49qynvdhmp3ug.png" alt="Image description" width="527" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y colocar la información que requiera, ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67kbfqnj9cbqy3fwfe39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67kbfqnj9cbqy3fwfe39.png" alt="Image description" width="526" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y con esto, concluimos. Aunque pueda parecer básico, este artículo está diseñado para ser de ayuda a aquellos que están empezando con Logic Apps y se encuentran en situaciones similares a las que yo enfrenté en su momento&lt;/p&gt;

&lt;p&gt;Si tienes alguna pregunta o quieres compartir tus propias experiencias, no dudes en dejarla en la sección de comentarios. ¡Me encantaría leerlos!&lt;/p&gt;

&lt;p&gt;Saludos, y nos encontramos en el próximo artículo ;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Explorando el Operador ?? en C#</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Mon, 25 Mar 2024 00:54:04 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/explorando-el-operador-en-c-38k2</link>
      <guid>https://dev.to/veronicaguamann/explorando-el-operador-en-c-38k2</guid>
      <description>&lt;p&gt;En el mundo de la programación, uno de los desafíos más comunes al que nos enfrentamos es la gestión  o manejo de los valores nulos. &lt;br&gt;
En C# como en otros lenguajes, nos encontramos con diversas formas para manejar este problema. Específicamente en C# tenemos una opción que nos permite gestionar los valores nulos de forma concisa, y este es el &lt;strong&gt;&lt;em&gt;operador de fusión o coalición nula (??)&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En este breve artículo, vamos a entender cómo podemos simplificar y mejorar nuestro código cuando tratamos con valores nulos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es el Operador “&lt;em&gt;??&lt;/em&gt;”?&lt;/strong&gt;&lt;br&gt;
El operador ?? en C# se utiliza para proporcionar un valor de respaldo en caso de que una expresión sea nula. A continuación te muestro su sintaxis, que es bastante simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;expresion1&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="n"&gt;expresion2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí, &lt;strong&gt;expresion1&lt;/strong&gt; es la expresión cuyo valor se evalúa, y &lt;strong&gt;expresion2&lt;/strong&gt; es el valor de respaldo que se utiliza si expresion1 es nula.&lt;/p&gt;

&lt;p&gt;A continuación te muestro dos ejemplos prácticos en los que podemos utilizar este operador.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Asignar un valor por defecto si un valor es nulo:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;nombre&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombre&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"Nombre Predeterminado"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;longitud&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="n"&gt;Length&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Evitar excepciones NullReferenceException.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para eso podemos desencadenar una excepción si el resultado es nulo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;respuesta&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerUsuario&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"El usuario no existe"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al explorar estos ejemplos vemos el poder que tiene este operador al permitirnos manejar los valores nulos que a menudo pueden ser un dolor de cabeza en nuestras aplicaciones. &lt;/p&gt;

&lt;p&gt;Espero que estos ejemplos hayan sido de gran ayuda para comprender cómo funciona el operador de fusión nula ( ??) en C#. ¡Nos vemos en el próximo artículo o en &lt;a href="https://twitter.com/veronicaguamann"&gt;twitter&lt;/a&gt; :).&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Validación de nulos con el operador ?? en C#</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Tue, 29 Aug 2023 18:03:37 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/validacion-de-nulos-con-el-operador-en-c-1ngp</link>
      <guid>https://dev.to/veronicaguamann/validacion-de-nulos-con-el-operador-en-c-1ngp</guid>
      <description>&lt;p&gt;En nuestro día a día como programadores, nos encontramos de esas situaciones en las que tenemos que validar si una variable es nula y, si lo es, asignarle un valor por defecto. &lt;/p&gt;

&lt;p&gt;En el mundo de la programación cada lenguaje tiene sus operadores y símbolos que hacen que esta tarea sea más fácil y eficiente. &lt;/p&gt;

&lt;p&gt;En C# tenemos al &lt;strong&gt;operador ??(Coalescencia nula)&lt;/strong&gt; uno de los varios operadores que tiene este lenguaje de programación, este operador se encuentra dentro de los operadores de comparación simplificados.&lt;/p&gt;

&lt;p&gt;En este artículo aprenderemos que es, como utilizar este operador y como puede ayudarnos a simplificar nuestro código en los proyectos en los que trabajemos. Vamos a ello.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es el operador de coalescencia nula (??)?&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Veamos la definición técnica:&lt;/em&gt;&lt;br&gt;
El operador de coalescencia nula (??) es un operador de C# que permite asignar un valor predeterminado a una variable si su valor actual es nulo. Proporciona una forma concisa de manejar valores nulos sin tener que escribir varias líneas de código condicional.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Y ahora la definición menos técnica:&lt;/em&gt;&lt;br&gt;
El operador ?? valida si un valor es nulo y nos ayuda a asignarle un valor en caso de serlo, vamos a entenderlo mejor con un ejemplo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CASO DE USO&lt;/strong&gt;&lt;br&gt;
Tenemos una aplicación donde los usuarios pueden ingresar su nombre. Si no ingresan nada (nulo) vamos a mostrar la palabra "Invitado".&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Código tradicional&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;nombreUsuario&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombreUsuario&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nombreUsuario&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mensaje&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nombreUsuario&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;mensaje&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Invitado"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como ves esto nos lleva a una serie de comprobaciones y asignaciones.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ahora veámoslo con el operador ??&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;nombreUsuario&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerNombreUsuario&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;mensaje&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;nombreUsuario&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"Invitado"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Un cambio radical verdad? En lugar de varios bloques if-else para manejar valores nulos, ahora solo necesitamos una línea.&lt;br&gt;
Si nombreUsuario no es nulo, ¡tendrás su nombre! Y si es nulo, no hay problema, "Invitado" es tu plan B.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Veamos unos ejemplos más:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aquí tenemos una variable del precio de un producto, en lugar de que recibir un valor vacío vamos a asignarle un valor por defecto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;precioProducto&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerPrecioProducto&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;precioMostrar&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;precioProducto&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="m"&gt;0.00&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Escapando de las Excepciones&lt;/strong&gt;&lt;br&gt;
También debes haber enfrentado el desafío de las excepciones cuando intentas acceder a un objeto nulo. Aquí nuevamente, el operador ?? viene a tu rescate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;mensajeBienvenida&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerMensajeBienvenida&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;mensajeMostrar&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mensajeBienvenida&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="s"&gt;"¡Bienvenido a bordo!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;O Enviar una excepción personalizada.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Usuario&lt;/span&gt; &lt;span class="n"&gt;usuario&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ObtenerUsuario&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;??&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NotFoundException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Usuario no encontrado"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora ya sabes como validar valores nulos con nuestro super operador ??,  ya no tienes que perder tiempo en verificaciones tediosas ni enfrentarte a excepciones inesperadas.&lt;/p&gt;

&lt;p&gt;Nos vemos en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Hasta la próxima línea de código y que tus códigos siempre estén libres de nulos! 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Operador Ternario en C#</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Fri, 17 Feb 2023 19:17:36 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/operador-ternario-en-c-35jp</link>
      <guid>https://dev.to/veronicaguamann/operador-ternario-en-c-35jp</guid>
      <description>&lt;p&gt;El operador ternario en C# es una herramienta útil para simplificar el código y tomar decisiones basadas en una condición booleana. &lt;/p&gt;

&lt;p&gt;los operadores ternarios son utilizado en muchos lenguajes de programación y puede resultar confuso si no comprendes adecuadamente su sintaxis y funcionamiento. &lt;br&gt;
En este artículo, vamos a explorar cómo funciona el operador ternario simple en C# y cómo puedes utilizarlo en tus proyectos.&lt;/p&gt;

&lt;p&gt;En su forma más básica, el operador ternario(?) es una forma abreviada de escribir una sentencia if,else. &lt;br&gt;
Nos permite establecer un valor o una expresión basada en una condición booleana. La sintaxis del operador ternario es la siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

condición ? valorSiVerdadero : valorSiFalso


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6hmwjriylwk8fz2gok0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6hmwjriylwk8fz2gok0.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En esta sintaxis, &lt;strong&gt;condición&lt;/strong&gt; es la expresión booleana que se evalúa. Si la condición es verdadera, la expresión &lt;strong&gt;valorSiVerdadero&lt;/strong&gt; se evalúa y se devuelve como resultado. Si la condición es falsa, se evalúa la expresión &lt;strong&gt;valorSiFalso&lt;/strong&gt; y se devuelve como resultado. En otras palabras, el operador ternario funciona como una expresión que devuelve un valor u otro dependiendo de la evaluación de la condición.&lt;/p&gt;

&lt;p&gt;Aquí hay un ejemplo de cómo se puede utilizar el operador ternario en C#:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;edad&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;23&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;comprobacionEdad&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;edad&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"Mayor de edad"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Menor de edad"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$"El usuario es &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;comprobacionEdad&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;En este ejemplo, la variable edad se evalúa para ver si es mayor de edad. Si es así, la expresión "Mayor de edad" se devuelve como resultado y se asigna a la variable comprobacionEdad. Si edad es menor o igual a 18, la expresión "Menor de edad" se devuelve como resultado y se asigna a la variable comprobacionEdad.&lt;/p&gt;

&lt;p&gt;Una de las ventajas de utilizar el operador ternario en lugar de una sentencia if-else es que puede ayudar a simplificar el código y hacerlo más fácil de leer. También puede ser más eficiente en términos de rendimiento, ya que evita la necesidad de ejecutar una sentencia if-else completa.&lt;/p&gt;

&lt;p&gt;Es importante entender que el operador ternario no es adecuado para todas las situaciones. Si tienes una condición compleja o necesitas ejecutar varias instrucciones en cada rama de la sentencia if-else, es posible que sea más adecuado utilizar una sentencia if-else completa en lugar del operador ternario. Además, no abuses del operador ternario ya que el código puede volverse difícil de leer si se utilizan demasiadas expresiones complejas u operadores ternarios anidados.&lt;/p&gt;

&lt;p&gt;En conclusión, el operador ternario es una herramienta útil que puede ayudarte a simplificar el código y tomar decisiones basadas en una condición booleana en C#. Si lo utilizas de forma adecuada, puede mejorar la legibilidad y la eficiencia de tu código. Sin embargo, es importante recordar que no es adecuado para todas las situaciones y que es importante utilizarlo con moderación.&lt;/p&gt;

&lt;p&gt;Gracias por leerme, nos vemos en &lt;a href="https://twitter.com/veronicaguamann" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cambiar el valor NBF del JWT en ASP.NET MVC API - C#</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Thu, 29 Sep 2022 03:49:39 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/cambiar-el-valor-nbf-del-jwt-en-aspnet-mvc-api-c-8bp</link>
      <guid>https://dev.to/veronicaguamann/cambiar-el-valor-nbf-del-jwt-en-aspnet-mvc-api-c-8bp</guid>
      <description>&lt;p&gt;NBF en JWT significa Not Before&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claim Name: "nbf"&lt;/li&gt;
&lt;li&gt;Claim Description: Not Before&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obtiene o establece la hora no anterior para el token de seguridad. Este valor debe estar en UTC. &lt;br&gt;
Es decir nbf: Define el tiempo antes del cual el JWT NO DEBE ser aceptado para su procesamiento.&lt;/p&gt;

&lt;p&gt;Si por algún motivo tenemos o debemos cambiar el valor de NFB podemos hacerlo de la siguiente forma.&lt;/p&gt;

&lt;p&gt;En la configuración para obtener nuestro token vamos a tener algo parecido a esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;generateJwtToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// generate token that is valid for 7 days&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tokenHandler&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;JwtSecurityTokenHandler&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Encoding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ASCII&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_appSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Secret&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tokenDescriptor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SecurityTokenDescriptor&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Subject&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ClaimsIdentity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Claim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="n"&gt;NotBefore&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UtcNow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;Expires&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UtcNow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddDays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;SigningCredentials&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SigningCredentials&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SymmetricSecurityKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;SecurityAlgorithms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HmacSha256Signature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tokenHandler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokenDescriptor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tokenHandler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dentro de esta configuración la línea antes de especificar la expiración vamos a colocar la siguiente línea.&lt;br&gt;
NotBefore = DateTime.UtcNow.AddMinutes(5)&lt;br&gt;
Agregamos el tiempo en el que queremos que esté disponible nuestro token, en este caso de ejemplo le estoy agregando 5 minutos a la hora y fecha actual.&lt;/p&gt;

&lt;p&gt;Y ya podemos observar los cambios generando el token y probándolo en &lt;a href="https://jwt.io/"&gt;https://jwt.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eso es todo por hoy, espero que te sirvan de mucho estos recursos.&lt;/p&gt;

&lt;p&gt;Puedes seguirme en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.instagram.com/veronicaguamann/"&gt;Instagram &lt;/a&gt; o &lt;a href="https://www.facebook.com/veronicaguamann/"&gt;Facebook&lt;/a&gt; para más contenido técnico, consejos y más.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cambiar el valor NBF del JWT en ASP.NET MVC API -C#</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Thu, 29 Sep 2022 02:14:47 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/cambiar-el-valor-nfb-del-jwt-en-c-4dg1</link>
      <guid>https://dev.to/veronicaguamann/cambiar-el-valor-nfb-del-jwt-en-c-4dg1</guid>
      <description>&lt;p&gt;NBF en JWT significa Not Before&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claim Name: "nbf"&lt;/li&gt;
&lt;li&gt;Claim Description: Not Before&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Obtiene o establece la hora no anterior para el token de seguridad. Este valor debe estar en UTC. &lt;br&gt;
Es decir nbf: Define el tiempo antes del cual el JWT NO DEBE ser aceptado para su procesamiento.&lt;/p&gt;

&lt;p&gt;Si por algún motivo tenemos o debemos cambiar el valor de NFB podemos hacerlo de la siguiente forma.&lt;/p&gt;

&lt;p&gt;En la configuración para obtener nuestro token vamos a tener algo parecido a esto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;generateJwtToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// generate token that is valid for 7 days&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tokenHandler&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;JwtSecurityTokenHandler&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Encoding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ASCII&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_appSettings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Secret&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tokenDescriptor&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SecurityTokenDescriptor&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Subject&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;ClaimsIdentity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Claim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
                &lt;span class="n"&gt;NotBefore&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UtcNow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddMinutes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;Expires&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UtcNow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddDays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;SigningCredentials&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SigningCredentials&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;SymmetricSecurityKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;SecurityAlgorithms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HmacSha256Signature&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tokenHandler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokenDescriptor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tokenHandler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dentro de esta configuración la línea antes de especificar la expiración vamos a colocar la siguiente línea.&lt;br&gt;
NotBefore = DateTime.UtcNow.AddMinutes(5)&lt;br&gt;
Agregamos el tiempo en el que queremos que esté disponible nuestro token, en este caso de ejemplo le estoy agregando 5 minutos a la hora y fecha actual.&lt;/p&gt;

&lt;p&gt;Y ya podemos observar los cambios generando el token y probándolo en &lt;a href="https://jwt.io/"&gt;https://jwt.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eso es todo por hoy, espero que te sirvan de mucho estos recursos.&lt;/p&gt;

&lt;p&gt;Puedes seguirme en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.instagram.com/veronicaguamann/"&gt;Instagram &lt;/a&gt; o &lt;a href="https://www.facebook.com/veronicaguamann/"&gt;Facebook&lt;/a&gt; para más contenido técnico, consejos y más.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Recursos para prepararte para las certificaciones de Microsoft AZ-900 DP-900. Tips and Tricks</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Wed, 21 Sep 2022 04:56:40 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/recursos-para-prepararte-para-las-certificaciones-de-microsoft-az-900-dp-900-tips-and-tricks-4fk</link>
      <guid>https://dev.to/veronicaguamann/recursos-para-prepararte-para-las-certificaciones-de-microsoft-az-900-dp-900-tips-and-tricks-4fk</guid>
      <description>&lt;p&gt;El AZ-900(Azure Fundamentals) y el DP-900(Azure Data Fundamentals) son exámenes de certificación de Microsoft.&lt;/p&gt;

&lt;p&gt;¿Pero qué son estas certificaciones?&lt;br&gt;
Las certificaciones de Microsoft son una serie de exámenes que nos permiten demostrar nuestro conocimiento en una área en específico acerca de tecnologías de Microsoft.&lt;br&gt;
Aprobar estas certificaciones nos permiten reafirmar nuestro conocimiento en ciertas tecnologías y "demostrar" que estamos a la vanguardia de las nuevas tecnologías.&lt;/p&gt;

&lt;p&gt;Puedes encontrar más información &lt;a href="https://learn.microsoft.com/es-es/certifications/"&gt;aquí.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro de estas, se encuentran las Certificaciones de Microsoft Azure, es decir de la nube y se dividen en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fundamentals&lt;/li&gt;
&lt;li&gt;Associate &lt;/li&gt;
&lt;li&gt;Expert&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El AZ-900 y el DP-900 se encuentran en la categoría de Fundamentals, es decir que son las idóneas si estás iniciando en el mundo de la nube y cabe destacar que son certificaciones sin fecha de expiración, tomando en cuenta que las otras categorías se renuevan cada año.&lt;/p&gt;

&lt;p&gt;Ahora si vamos al grano.&lt;br&gt;
Tres de los recursos principales que me sirvieron mucho para aprobar el examen fueron&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/es-es/"&gt;Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.examtopics.com/"&gt;ExamTopics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Youtube&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A continuación voy a detallar cada uno de ellos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RECURSOS AZ-900&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;1. Lectura - Microsoft Learn&lt;/strong&gt;&lt;br&gt;
En Microsoft Learn podemos encontrar rutas de aprendizaje, desde lo más básico hasta temas avanzados y tenemos una ruta específicamente para prepararnos para cada certificación.&lt;br&gt;
En el caso de AZ-900 podemos encontrar información &lt;a href="https://learn.microsoft.com/en-us/certifications/exams/az-900"&gt;aquí&lt;/a&gt;.&lt;br&gt;
Aquí vamos a encontrar  una sección que nos sugiere dos formas de aprendizaje.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Online - Gratis&lt;/li&gt;
&lt;li&gt;Con un instructor - Pago&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mJBjYK4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1ms2fwsbx6cask08cif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mJBjYK4d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1ms2fwsbx6cask08cif.png" alt="Image description" width="880" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos aprender todos los aspectos que embarca el examen de certificación. Para las personas que gusten de la lectura no será problema pero si no puede parecerte algo largo y aburrido, pero al final es de mucha ayuda.&lt;/p&gt;

&lt;p&gt;Cabe recalcar que puedes cambiar el idioma a español o al idioma de tu preferencia todo el contenido de Microsoft Learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Vídeos - Youtube&lt;/strong&gt;&lt;br&gt;
También encontramos muchos otros recursos como videos en youtube para poder aprender todo este contenido de forma resumida, personalmente te recomiendo &lt;a href="https://www.youtube.com/watch?v=ojulrWhTA8Q&amp;amp;t=1185s"&gt;esta serie de videos.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y por último lo que más me sirvió fue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cuestionarios con Respuestas - ExamTopics&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hjdlcbFo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rynbmgnaupd42xiz41x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hjdlcbFo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rynbmgnaupd42xiz41x.png" alt="Image description" width="880" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En &lt;a href="https://www.examtopics.com/exams/microsoft/az-900/view/"&gt;este link&lt;/a&gt;  podemos observar un cuestionario, es decir una serie de preguntas muy muy similares a las que vienen en el examen oficial.&lt;/p&gt;

&lt;p&gt;Si tienes poco tiempo para prepararte para el examen de certificación te recomiendo que solamente uses este recurso, porque además de darte las respuestas a cada pregunta, te da recursos o fuentes de donde puedes encontrar la información en la que se basó la respuesta y además, algo super importante es que existe una sección de discusión, en la que varias personas que están estudiando para el examen o personas que ya lo dieron. &lt;br&gt;
Aquí puedes "discutir" sobre la respuesta o a su vez notifican que la pregunta vino en el examen y la fecha.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7GdzKpb_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8dq2efy8cnoo2vfgl96t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7GdzKpb_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8dq2efy8cnoo2vfgl96t.png" alt="Image description" width="880" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rn5LkDlT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u32rkmk1459h2r239ua3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rn5LkDlT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u32rkmk1459h2r239ua3.png" alt="Image description" width="532" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RECURSOS PARA EL DP-900&lt;/strong&gt;&lt;br&gt;
y para el DP-900 tenemos mismos recursos.&lt;br&gt;
&lt;strong&gt;1. Lectura - Microsoft Learn&lt;/strong&gt;&lt;br&gt;
En &lt;a href="https://learn.microsoft.com/en-us/certifications/exams/dp-900"&gt;este enlace&lt;/a&gt; encontramos de igual forma una ruta de aprendizaje y mientras vamos avanzando nos seguirán apareciendo más temas avanzados acerca del tema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Videos - Youtube&lt;/strong&gt;&lt;br&gt;
En youtube el mejor recurso que encontré fue &lt;a href="https://www.youtube.com/watch?v=NKBBWJO_G2g&amp;amp;list=PLHMXo-n1MoYyMdy0Mb8KpZyns17zUromr"&gt;este&lt;/a&gt;, que es una lista de 4 videos que abarcan todos los temas desde lo básico a lo más avanzado. Son temas que realmente debemos conocer y se incluyen en el examen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cuestionarios con Respuestas - ExamTopics&lt;/strong&gt;&lt;br&gt;
De igual forma como lo describí en el recurso para el AZ-900, aquí tenemos cuestionarios y en mi experiencia. Gran parte de estas preguntas o similares se incluyen en el examen, a veces solo cambia el orden de las preguntas.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;CONSEJOS PARA EL DÍA DEL EXÁMEN&lt;/em&gt;*&lt;br&gt;
Finalmente déjame darte algunos consejos adicionales.&lt;br&gt;
Es importante que sepas algo de ingles ya que los supervisores van a hablarte en este idioma, pero si de plano no sabes o conoces muy poco de ingles tienes un chat y al inicio puedes escribirles que te vas a comunicar por el chat porque no entiendes muy bien al escuchar, aunque esto también es en ingles puedes previamente preparar algunas frases antes del examen.&lt;/p&gt;

&lt;p&gt;No debes tener abierto nada más que la aplicación del examen.&lt;br&gt;
No debe existir ruido o pueden suspenderte el examen.&lt;br&gt;
Tu espacio debe estar vacío, es decir que no debe haber nada a tu al rededor ya que piensan que puedes tener algún tipo de ayuda escrita o de otro tipo.&lt;/p&gt;

&lt;p&gt;Creo que eso es todo, espero que te sirvan de mucho estos recursos, aprende mucho y muchos muchos éxitos en tu examen.&lt;/p&gt;

&lt;p&gt;Puedes seguirme en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.instagram.com/veronicaguamann/"&gt;Instagram &lt;/a&gt; o &lt;a href="https://www.facebook.com/veronicaguamann/"&gt;Facebook&lt;/a&gt; para más contenido técnico, consejos y más.&lt;/p&gt;

&lt;p&gt;Nos vemos :D&lt;/p&gt;

</description>
      <category>azure</category>
      <category>microsoft</category>
      <category>az900</category>
      <category>dp900</category>
    </item>
    <item>
      <title>API con ASP.NET MVC 6 y SQL Server mediante Entity Framework core 6 - Code First - Parte 2</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Fri, 24 Jun 2022 05:01:59 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg</link>
      <guid>https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg</guid>
      <description>&lt;p&gt;En la &lt;strong&gt;&lt;a href="https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-1-2i05"&gt;Primera parte&lt;/a&gt;&lt;/strong&gt; vimos la configuración de Entity Framework en nuestro proyecto, para poder conectarnos con SQL Server. Si ya tienes todo listo podemos continuar, si aún no la tienes puedes volver &lt;a href="https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-1-2i05"&gt;AQUÍ&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;En esta segunda parte vamos a realizar los Métodos CRUD de nuestra API, En este caso vamos a trabajar con un repositorio, interfaz, controlador y finalmente probarlo mediante Swagger. Si bien podríamos hacerlo directamente en el controlador, no es recomendable tener los métodos tan expuestos. y en proyectos reales, lo realizamos en proyectos diferentes (Data, Services, API), en este tutorial lo simularemos en un solo proyecto.&lt;/p&gt;

&lt;p&gt;Dicho esto, vamos a ello.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Crear la interfaz
&lt;/h2&gt;

&lt;p&gt;Para esto, en nuestra carpeta Models vamos a crear una nueva carpeta llamada &lt;em&gt;Repository&lt;/em&gt;, dentro de esta agregamos una interfaz que se llamará &lt;em&gt;IProductRepository&lt;/em&gt;. &lt;br&gt;
Aquí vamos a agregar los métodos que tendrá nuestro CRUD.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Models.Repository&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IProductRepository&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;CreateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;DeleteProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="nf"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetProducts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;UpdateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Crear el Repositorio
&lt;/h2&gt;

&lt;p&gt;En la misma carpeta, &lt;em&gt;Repository&lt;/em&gt; agregaremos una nueva clase y la llamaremos ProductRepository.&lt;br&gt;
El siguiente paso será realizar la implementación de nuestra interfaz &lt;em&gt;IProductRepository&lt;/em&gt;.  Aquí vamos a realizar nuestro CRUD. En este archivo vamos a realizar la conexión a nuestra base de datos, así no lo tenemos expuesto directamente en nuestro controlador y se verá de la siguiente manera.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.EntityFrameworkCore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Models.Repository&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProductRepository&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;IProductRepository&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;DemoContext&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ProductRepository&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DemoContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetProducts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="nf"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;CreateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;().&lt;/span&gt;&lt;span class="nf"&gt;AddAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;UpdateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Entry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;State&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;EntityState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Modified&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;DeleteProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;//var entity = await GetByIdAsync(id);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;().&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SaveChangesAsync&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Configurar Repository
&lt;/h2&gt;

&lt;p&gt;Para poder usar nuestra interfaz tenemos que realizar la siguiente &lt;strong&gt;configuración&lt;/strong&gt; en el archivo &lt;em&gt;Program.cs&lt;/em&gt;, vamos a agregar las siguientes líneas debajo de la configuración de Entity Framework.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddTransient&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IProductRepository&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ProductRepository&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Configurar el controlador
&lt;/h2&gt;

&lt;p&gt;Ya tenemos todo listo para crear nuestro controlador.&lt;br&gt;
En la Carpeta &lt;em&gt;Controlador&lt;/em&gt; agregamos un nuevo controlador y lo llamaremos &lt;em&gt;ProductController&lt;/em&gt;.&lt;br&gt;
Vamos a crear la configuración para poder acceder desde la interfaz al repositorio y poder hacer la llamada a los métodos creados en esta clase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;IProductRepository&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ProductController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IProductRepository&lt;/span&gt; &lt;span class="n"&gt;productRepository&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;_productRepository&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;productRepository&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Crear los métodos en nuestro controlador
&lt;/h2&gt;

&lt;p&gt;Como se trata de un API, mediante los &lt;em&gt;verbos Http&lt;/em&gt; vamos a etiquetar cada método acorde a la acción que va a realizar, HttpGet para obtener Datos, HttpPost para hacer inserts, HttpPut para Editar datos existentes, y HttpDelete para eliminar.&lt;br&gt;
Para crear los métodos de nuestro CRUD, mediante la interfaz llamamos a los métodos ya creados en el repositorio y enviamos los datos recibidos y nuestro controlador quedará de la siguiente forma.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Models&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Models.Repository&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Mvc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Controllers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"api/[controller]"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ApiController&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProductController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ControllerBase&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;IProductRepository&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;ProductController&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IProductRepository&lt;/span&gt; &lt;span class="n"&gt;productRepository&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;_productRepository&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;productRepository&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ActionName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetProductsAsync&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetProductsAsync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProducts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpGet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ActionName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;productByID&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;productByID&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;productByID&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;HttpPost&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ActionName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CreateProductAsync&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;CreateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;CreatedAtAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpPut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ActionName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UpdateProduct&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;UpdateProduct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Product&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;BadRequest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UpdateProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;NoContent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;HttpDelete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"{id}"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ActionName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;nameof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DeleteProduct&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IActionResult&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;DeleteProduct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetProductById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;NotFound&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_productRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;DeleteProductAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;NoContent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalmente vamos a &lt;strong&gt;ejecutar nuestra Aplicación&lt;/strong&gt; y vamos a &lt;em&gt;probar que todo funcione&lt;/em&gt; correctamente.&lt;br&gt;
Por defecto al crearse el proyecto, nuestra API viene integrada con &lt;em&gt;Swagger&lt;/em&gt;, que es una OPEN API para documentación y viene integrada con una interfaz que nos permite probar nuestros métodos. (Si deseas saber más de Swagger te dejo el siguiente &lt;a href="https://dev.to/veronicaguamann/sesion-apis-con-net-5-y-documentacion-con-swagger-3gk"&gt;artículo&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qAvVNXZT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0xequnqih6tq75nrtrp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qAvVNXZT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0xequnqih6tq75nrtrp.jpg" alt="Image description" width="880" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primero vamos a probar nuestro método Post, ingresando un producto, en este caso simularemos el ingreso de un teclado.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lBpHxAqJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uxayu645q5l9sewbenyi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lBpHxAqJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uxayu645q5l9sewbenyi.jpg" alt="Image description" width="880" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al darle a &lt;strong&gt;Execute&lt;/strong&gt; tiene que darnos una respuesta, en este caso el código 200 para indicarnos que todo está correcto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7QAMa14i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ktbue7w9s2yxhgnz5enh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7QAMa14i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ktbue7w9s2yxhgnz5enh.jpg" alt="Image description" width="670" height="742"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finalmente vamos a probar nuestro Get y verificar que nuestro insertar funciono correctamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q7unz-Rf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eynuwch2ba0xqqh99qub.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q7unz-Rf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eynuwch2ba0xqqh99qub.jpg" alt="Image description" width="880" height="567"&gt;&lt;/a&gt;&lt;br&gt;
Y así hemos completado nuestra API.&lt;/p&gt;

&lt;p&gt;Muchas gracias por leerme y Nos vemos en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt; e &lt;a href="https://www.instagram.com/veronicaguamann"&gt;Instagram&lt;/a&gt; ;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>API con ASP.NET MVC 6 y SQL Server mediante Entity Framework core 6 - Code First - Parte 1</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Fri, 24 Jun 2022 04:55:07 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-1-2i05</link>
      <guid>https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-1-2i05</guid>
      <description>&lt;p&gt;&lt;strong&gt;ASP.NET 6&lt;/strong&gt; se ha actualizado junto a .NET 6, y una de las &lt;strong&gt;actualizaciones&lt;/strong&gt; más notables ha sido &lt;strong&gt;la eliminación del archivo Startup.cs&lt;/strong&gt;, el cual se ha unificado con el archivo Program.cs&lt;/p&gt;

&lt;p&gt;Esto suele crear una confusión de como llevábamos nuestras conexiones con los servicios, por ejemplo la conexión a la Base de datos con Entity Framework entre otras configuraciones que veremos en el tutorial de hoy&lt;/p&gt;

&lt;p&gt;En ese sentido, en este tutorial vamos a crear un API con métodos fundamentales, un CRUD y veremos como podemos conectar nuestro proyecto con SQL Server mediante Entity Framework. &lt;/p&gt;

&lt;p&gt;En este Artículo en especifico, vamos a ver la parte 1, la cual consiste en realizar toda la configuración de Entity Framework hasta la migración de nuestra entidad hacia la base de datos.&lt;br&gt;
Y vamos a ver como sin tocar SQL ni nuestro gestor SQL Server vamos a crear la base de datos y la tabla Product con sus respectivos campos.&lt;/p&gt;

&lt;p&gt;Para la realización de las funciones (CRUD) te dejo la &lt;a href="https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg"&gt;Parte 2&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Para este tutorial vamos a necesitar
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Visual Studio 2022(ya incluye SDK .NET 6) o SDK .NET 6 y Editor de código de su preferencia&lt;/li&gt;
&lt;li&gt;SQL server Management Studio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Teniendo todo esto listo, vamos a empezar. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Crear un proyecto API - ASP.NET MVC 6&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;EL primer paso es crear un proyecto ASP.NET Core Web API&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs9es1lrazkadjo6uh7i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs9es1lrazkadjo6uh7i.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
 Al crear el proyecto debemos elegir la versión de nuestro proyecto, en este caso .NET 6 y dejamos las opciones que vienen marcadas por defecto &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwgrncb1pmctf9a2s7et.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwgrncb1pmctf9a2s7et.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A primera vista podemos observar la estructura de la plantilla con estructura MVC y algo nuevo, desapareció el archivo STARTUP.CS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86x9h0lgx79mfqjt77ps.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86x9h0lgx79mfqjt77ps.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;
Aunque el archivo no viene por defecto en la plantilla, nosotros podemos añadirlo manualmente.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Agregar la clase "Product"&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para este proyecto vamos a crear un CRUD para productos, entonces, vamos a crearnos una carpeta llamada Models y dentro de esta agregamos una nueva carpeta y la nombraremos Data, añadimos una clase con los atributos de la entidad Product. en este caso solamente va a tener un Id, un nombre y una descripción&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Models&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Product&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Hecho esto vamos con el siguiente paso.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Instalar paquetes de Entity Framework&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para poder conectarnos con SQL Server vamos a utilizar Entity Framework, entonces para esto necesitamos agregar 3 paquetes a nuestro proyecto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entity Framework Core&lt;/li&gt;
&lt;li&gt;EF para SQL Server y &lt;/li&gt;
&lt;li&gt;Entity Framework Tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para esto nos vamos al Administrador de paquetes Nuget, buscamos los paquetes mencionados anteriormente y le damos en instalar&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffjbjqnj7ph8ej221pyib.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffjbjqnj7ph8ej221pyib.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. Agregar y configurar el DbContext&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;El siguiente paso será configurar la conexión a la base de datos, para esto en la misma carpeta &lt;strong&gt;Models/Data&lt;/strong&gt;, agregamos una clase que se llamará &lt;strong&gt;DemoContext.cs&lt;/strong&gt; y dentro de esta vamos a agregar la siguiente configuración.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.EntityFrameworkCore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Models&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DemoContext&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DbContext&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;DemoContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DbContextOptions&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DemoContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;DbSet&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Product&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Products&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Aqui agregamos a nuestra entidad, Product que es la que vamos a agregar a la base de datos.&lt;br&gt;
La estructura de nuestro proyecto hasta el momento se ve así&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe70e6cg3zo94nxv4rdlp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe70e6cg3zo94nxv4rdlp.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Agregar nuestra cadena de conexión a la Base de Datos&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Desde .NET core las cadenas de conexión o configuraciones que solían ir en el webconfig podemos colocarlos en le archivo &lt;strong&gt;appsettings.json&lt;/strong&gt;, entonces vamos a agregar la cadena de conexión a este archivo y quedará algo así&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Logging"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"LogLevel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Default"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Information"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Microsoft.AspNetCore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Warning"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ConnectionStrings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"DefaultConnection"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server = localhost; database = DemoApi; Trusted_Connection = true"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"AllowedHosts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Agregamos la cadena de conexión, aquí va el nombre del servidor en el que se encuentra tu base de datos, en este caso el mío es local host, segundo va el nombre de tu base de datos y por ultimo agregamos esta configuración de seguridad, si el nombre de tu servidor es diferente y/o tiene usuario o contraseña debemos agregarla a la cadena de conexión como "user = tuUsuario" y "password = tucontraseña".&lt;/p&gt;

&lt;p&gt;Esta configuración nos va a servir en el siguiente punto&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Configurar mi Program.cs para obtener la cadena de conexión&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;En este punto vamos a configurar el archivo Program.cs, anteriormente esta configuración la realizábamos en el startup.cs pero no difiere en mucho, debemos agregar las siguientes líneas.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;DemoContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;
    &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UseSqlServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DefaultConnection"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Aquí hacemos uso del paquete EF para SQL Server, y obtenemos la cadena de conexión del appsettings.json para poder conectarnos a nuestro servidor y poder crear y posteriormente interactuar con la base de datos&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. Realizar la migración del ASP.NET MVC a Base de Datos&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Hechos todos los pasos anteriores, vamos a la consola de paquetes en visual studio o a la terminal y vamos a ejecutar el siguiente comando &lt;strong&gt;Add-Migration InitialMigration&lt;/strong&gt; en donde InitialMigrations puede ser modificada a tu gusto, es como se llamará está migración en especifico, en este caso yo la llamé así, y acorde vayas migrando puedes especificar que cambios agregas etc. &lt;br&gt;
Si todo está configurado correctamente, se debío crear una carpeta con el nombre especificado en este caso InitalMigration y dentro de esta un archivo con todos los cambios que se van a ir a la base de datos. se verá algo así&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;

&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.EntityFrameworkCore.Migrations&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cp"&gt;#nullable disable
&lt;/span&gt;
&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;DemoAPI.Migrations&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;InitialMigration&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Migration&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Up&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MigrationBuilder&lt;/span&gt; &lt;span class="n"&gt;migrationBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;migrationBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;CreateTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Products"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;Id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"int"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Annotation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SqlServer:Identity"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"1, 1"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                    &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"nvarchar(max)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                    &lt;span class="n"&gt;Description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"nvarchar(max)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;},&lt;/span&gt;
                &lt;span class="n"&gt;constraints&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PrimaryKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"PK_Products"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Down&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MigrationBuilder&lt;/span&gt; &lt;span class="n"&gt;migrationBuilder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;migrationBuilder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;DropTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Products"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Aquí podemos observar este código generado que contiene toda la información de la migración, en este caso nos dice que vamos a crear una tabla llamada &lt;strong&gt;Product&lt;/strong&gt; con los campos especificados y le asigna por defecto al Id como clave primaria. &lt;br&gt;
El siguiente comando es &lt;strong&gt;Update-Database&lt;/strong&gt; con este comando vamos a enviar todos estos cambios a la base de datos, si todo está correcto podemos ir a nuestro SQL Server Management Studio a verificar que se creo nuestra base de datos &lt;strong&gt;DemoApi&lt;/strong&gt; y la tabla &lt;strong&gt;Product&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Podremos visualizar esto:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0llgi3t6s1q3rk2moiux.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0llgi3t6s1q3rk2moiux.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahoya ya tenemos todo listo para empezar con nuestro CRUD, te dejo el enlace a la &lt;a href="https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg"&gt;PARTE 2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Muchas gracias por leerme y Nos vemos en &lt;a href="https://twitter.com/veronicaguamann" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; e &lt;a href="https://www.instagram.com/veronicaguamann" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; ;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sesión - APIs con .NET 5 y Documentación con Swagger</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Sat, 17 Jul 2021 14:42:23 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/sesion-apis-con-net-5-y-documentacion-con-swagger-3gk</link>
      <guid>https://dev.to/veronicaguamann/sesion-apis-con-net-5-y-documentacion-con-swagger-3gk</guid>
      <description>&lt;p&gt;Hola a todos :D&lt;br&gt;
En esta ocasión abordamos el tema de como podemos &lt;strong&gt;documentar nuestras APIs hechas en ASP.NET 5 con Swagger.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Partiendo desde las bases podemos tratar los temas a breves rasgos para dar un contexto a la parte netamente técnica que se trato en la sesión.&lt;/p&gt;

&lt;p&gt;Iniciamos definiendo que es una &lt;strong&gt;API(Application Programming Interfaces)&lt;/strong&gt; en palabras breves, como su nombre lo indica es una Interfaz que permite la comunicación entre aplicaciones.&lt;br&gt;
Las APIs permiten que nuestros productos y servicios se comuniquen con otros, sin necesidad de saber cómo están implementados.&lt;/p&gt;

&lt;p&gt;Podemos construir APIs, para el consumo de nuestras aplicaciones privadas(móviles, web), internas de la empresa o podemos consumir APIs públicas(APIs externas).&lt;/p&gt;

&lt;p&gt;Por otra parte, si desarrollamos nuestras APIs, un paso super importante y una buena práctica es realizar su &lt;strong&gt;documentación&lt;/strong&gt;, ya que estas APIs van a ser consumidas por terceras personas, ya sea porque es una API pública, o va a ser consumida por el equipo de Frontend.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;documentar&lt;/strong&gt; ayudará a que las personas que van a consumirla puedan entender que van a consumir, que parámetros deben ingresar, cual va a ser la respuesta que van a obtener&lt;br&gt;
O como paso fundamental para nosotros como desarrolladores la documentación nos ayuda a recordar que hicimos, como lo hicimos y a futuro poder realizar mejoras y nuevas versiones. &lt;/p&gt;

&lt;p&gt;En este punto entra el termino de &lt;strong&gt;Swagger&lt;/strong&gt;, que es una herramienta basada en el estándar OpenAPI que nos permite documentar y probar nuestros Web APIs de forma accesibles y entendibles por los usuarios o desarrolladores que pretendan utilizarlos.&lt;/p&gt;

&lt;p&gt;Con esta premisa, y entrando ya al tema, en &lt;strong&gt;.NET con ASP.NET&lt;/strong&gt; podemos crear APIs fácilmente, ya que nos proporciona una plantilla basada en MVC(aunque no tenga vistas) para poder crearla rápidamente e ir construyendolas. &lt;/p&gt;

&lt;p&gt;También nos proporciona herramientas para realizar la documentación utilizando Swagger, para esto existen paquetes Nugget, &lt;strong&gt;Swashbuckle y NSwag&lt;/strong&gt; (en esta ocasión utilizaremos Swashbuckle).&lt;/p&gt;

&lt;p&gt;Podemos agregarla mediante consola o por el administrador de paquetes Nugget y realizar algunas configuraciones en el Startup de nuestro proyecto para poder visualizarlo e iniciar con la documentación(como lo menciono en el video).&lt;/p&gt;

&lt;p&gt;Y un punto super importante que podemos mencionar es que a partir de la versión &lt;strong&gt;ASP.NET 5 Swagger&lt;/strong&gt; viene incorporada en la plantilla de nuestras APIs, así que no necesitaremos hacer nada, prácticamente tenemos todo configurado para iniciar a documentar.&lt;/p&gt;

&lt;p&gt;En la sesión tratamos estos temas teóricos a detalle, por eso solo menciono lo más reelevante en este post.&lt;/p&gt;

&lt;p&gt;Dicho todo esto, adjunto todos los recursos que utilizamos en la sesión:&lt;/p&gt;

&lt;p&gt;Te dejo el video de la sesión &lt;strong&gt;&lt;a href="https://youtu.be/1csQbe6JppY" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;&lt;/strong&gt;, en el que revisamos un poco de teoría como introducción, posteriormente realizamos la DEMO con un ejemplo de como podemos documentar nuestra API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/1csQbe6JppY" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tjlpu4krfvtpwx78oh0.PNG" alt="Alt Text"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;También te adjunto el repositorio en Github &lt;strong&gt;&lt;a href="https://github.com/VeronicaGuaman/APIWhitSwagger" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;&lt;/strong&gt;, con el código fuente utilizado en la sesión y podrás encontrar también las diapositivas.&lt;/p&gt;

&lt;p&gt;Nos vemos en &lt;a href="https://twitter.com/veronicaguamann" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; e &lt;a href="https://www.instagram.com/veronicaguamann/" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt; ;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>10 Atajos y Fragmentos de código que nos ahorraran tiempo al programar en Visual Studio</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Sat, 12 Jun 2021 20:35:24 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/10-atajos-y-fragmentos-de-codigo-que-nos-ahorraran-tiempo-al-programar-en-visual-studio-4336</link>
      <guid>https://dev.to/veronicaguamann/10-atajos-y-fragmentos-de-codigo-que-nos-ahorraran-tiempo-al-programar-en-visual-studio-4336</guid>
      <description>&lt;p&gt;Visual Studio(VS) es un Potente IDE que nos brinda muchas herramientas que facilitan todo el proceso de desarrollo de software.&lt;/p&gt;

&lt;p&gt;En esta ocasión veremos fragmentos de código y atajos que nos ahorrará tiempo al codificar en VS, los que uso en mi día a día y creo que te será de gran ayuda&lt;/p&gt;

&lt;p&gt;En primer lugar vamos a ver fragmentos de código, estos son pequeños "atajos", basta teclear palabras claves y darles doble tab para que se inserte el código requerido.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Crear una clase
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   class + doble tab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Al realizar esta acción se crea una declaración de clase, esta debe ser usada en un namespace. Y se va a visualizar así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora tienes que reemplazar el **"MyClass" por el nombre de tu clase y ya puedes utilizarlo&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Crear un constructor
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   ctor + doble tab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Crea un constructor para la clase contenedora, debemos estar dentro de una clase para poder hacer uso de este, ya que toma el nombre de esta clase y crea su constructor.&lt;br&gt;
Se verá así&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;MyClass&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
   &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Crear un  atributo
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   prop + doble tab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Crea una declaración de propiedad autoimplementada, es decir que crea una propiedad con los métodos get y set dentro de una clase.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;MyProperty&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;solo deberíamos cambiar el tipo de dato y el nombre de la propiedad.&lt;/p&gt;

&lt;h2&gt;
  
  
  4.Crear un bloque Try - Catch
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                   try + doble tab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;crea un bloque try - catch dentro de un método&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="k"&gt;try&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
 &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
 &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="k"&gt;throw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ahora solo nos queda insertar el código dentro.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Console WriteLine
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                cw + doble tab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;como vemos nos ayuda a crear un Console.Writeline rapidamente, ya solo nos queda ingresar lo que queremos mostrar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ahora vamos a revisar algunos atajos que podemos realizar desde nuestro teclado.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Duplicar la línea
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Ctrl + D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Duplica la línea en donde esta el cursos o las líneas seleccionadas&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En los siguientes atajos, mantén presionado el ctrl y posteriormente digita las letras en orden.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Formatear el código
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Ctrl + K, Ctrl + F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Formatea el código seleccionado, o el archivo actual. &lt;/p&gt;

&lt;h2&gt;
  
  
  8. Comentar un fragmento de código
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Ctrl + K, Ctrl + C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Comenta las líneas seleccionadas&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Descomentar un fragmento de código
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Ctrl + K, Ctrl + U
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Descomenta las líneas seleccionadas&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Mostrar sugerencias
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Ctrl + Barra espaciadora
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Completa palabras, muestra sugerencias de código, un ejemplo simple lo podemos observar al usarlo después de &lt;strong&gt;"clase."&lt;/strong&gt; nos muestra su atributos, métodos etc.&lt;/p&gt;

&lt;p&gt;Nos vemos en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt; e &lt;a href="https://www.instagram.com/veronicaguamann/"&gt;Instagram&lt;/a&gt; ;)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Sesión - Construyendo una Aplicación Web con ASP.NET 5 y SQL Server</title>
      <dc:creator>Verónica Guamán</dc:creator>
      <pubDate>Tue, 18 May 2021 23:12:58 +0000</pubDate>
      <link>https://dev.to/veronicaguamann/sesion-construyendo-una-aplicacion-web-con-asp-net-5-y-sql-server-1217</link>
      <guid>https://dev.to/veronicaguamann/sesion-construyendo-una-aplicacion-web-con-asp-net-5-y-sql-server-1217</guid>
      <description>&lt;p&gt;En esta sesión abarcamos temas básicos, desde la explicación de que es .NET hasta realizar una aplicación web, en sí un CRUD(Create, Read, Update, Delete) de un Producto.&lt;/p&gt;

&lt;p&gt;Puedes volver a ver la sesión aquí:&lt;/p&gt;

&lt;p&gt;En mi &lt;a href="https://fb.watch/5zX7BbEtQ3/"&gt;página de Facebook:&lt;/a&gt;&lt;br&gt;
o en mi &lt;a href="https://youtu.be/WG4y5h91iZY"&gt;canal de Youtube:&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jLVWJ_sO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fff9o6tk8z41nu0ai226.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jLVWJ_sO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fff9o6tk8z41nu0ai226.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El repositorio del proyecto realizado lo encuentras &lt;a href="https://github.com/VeronicaGuaman/SesionAppWebDemo"&gt;aquí&lt;/a&gt;&lt;br&gt;
y lo más pedido, las presentaciones también la encuentras en el repositorio de GitHub.&lt;/p&gt;

&lt;p&gt;Pueden descargar el proyecto y usarlo, pero deben colocar su cadena de conexión en el appsettings.json. y funcionará perfectamente.&lt;/p&gt;

&lt;p&gt;Se resolvió la conexión a la DB en el hosting con Soome, actualice el &lt;a href="https://dev.to/veronicaguamann/publicar-aplicacion-web-net-core-codefirts-en-un-hosting-gratuito-soome-2021-35i"&gt;artículo&lt;/a&gt; con el paso adicional que me faltaba y ya funciona correctamente.&lt;br&gt;
debí correr la migración, en el artículo anterior no lo necesitaba ya que se ejecutaba un DBSeed y por eso se creaba automaticamente.&lt;/p&gt;

&lt;p&gt;Pero ya quedo resuelto :D&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9ntkgHCq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5q2dbq2m50nin061arm.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9ntkgHCq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5q2dbq2m50nin061arm.PNG" alt="Alt Text"&gt;&lt;/a&gt; &lt;br&gt;
Nos vemos en &lt;a href="https://twitter.com/veronicaguamann"&gt;Twitter&lt;/a&gt; e &lt;a href="https://www.instagram.com/veronicaguamann/"&gt;Instagram&lt;/a&gt; ;)&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
