Conectando .NET con ApsaraDB

Esta es una guía en la que aprenderemos a conectar una API con ApsaraDB/postgreSQL

1. creamos una nueva API usando el comando dotnet new webapi

2. Agregamos los nugets para Entity framework y PostgreSQL

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL

3. Creamos la clase TodoItem, TodoItem.cs 

namespace ApiPostgre;
public class TodoItem
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool IsCompleted { get; set; }
}

4. Creamos TodoItemContext.cs para manejar Entity framework

using Microsoft.EntityFrameworkCore;
namespace ApiPostgre;
public class TodoItemContext : DbContext
{
    public DbSet<TodoItem> TodoItems { get; set; }
    public TodoItemContext(DbContextOptions<TodoItemContext> options) : base(options)
    {
    }
}

5. Agregamos TodoItemController incluyendo todos los mentodos (get, post, put, delete)

using Microsoft.AspNetCore.Mvc;
namespace ApiPostgre.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TodoItemController : ControllerBase
    {
        TodoItemContext bd;
        public TodoItemController(TodoItemContext context)
        {
            bd = context;
            bd.Database.EnsureCreated();
        }
        [HttpGet("")]
        public ActionResult<IEnumerable<TodoItem>> GetTodoItems()
        {
            return  bd.TodoItems;
        }
        [HttpGet("{id}")]
        public ActionResult<TodoItem> GetTodoItemById(int id)
        {
            var currentItem = bd.TodoItems.FirstOrDefault(p=> p.Id == id);
            if(currentItem == null) return NotFound();
            return currentItem;
        }
        [HttpPost("")]
        public async Task PostTodoItem(TodoItem model)
        {
            bd.Add(model);
            await bd.SaveChangesAsync();
        }
        [HttpPut("{id}")]
        public async Task<IActionResult> PutTodoItem(int id, TodoItem model)
        {
            var currentItem = bd.TodoItems.FirstOrDefault(p=> p.Id == id);
            if(currentItem == null) return NotFound();
            currentItem.Title = model.Title;
            currentItem.IsCompleted = model.IsCompleted;
            await bd.SaveChangesAsync();
            return NoContent();
        }
        [HttpDelete("{id}")]
        public ActionResult<TodoItem> DeleteTodoItemById(int id)
        {
            return null;
        }
    }
}

6. ApsaraDB RDS es un servicio creado por alibaba cloud para alojar database como SQL Server, PostgreSQL y MySQL

Vamos a crear una nueva instancia de ApsaraDB RDS en Alibaba Cloud

Connecting .NET API to ApsaraDB 2 with postgreSQL

seleccionar Create Instance

Connecting .NET API to ApsaraDB 2 with postgreSQL

Puedes seleccionar suscription si quieres reservar a base de datos por largo tiempo y pagar un valor fijo. También puedes usar Pay as you go si solo desear usar la BD por tiempo especifico como para un demo o en general si deseas este tipo de pago.

Connecting .NET API to ApsaraDB 2 with postgreSQL

Completa dandole click a Pay Now

Connecting .NET API to ApsaraDB 2 with postgreSQL

7. Despues de esperar por la creación podemos ver en el modulo de instances nuestra instancia creada con un nombre o ID autogenerado, dale click al nombre para entrar en la configuración.

Connecting .NET API to ApsaraDB 2 with postgreSQL

seleciona Create Account y escribe un usuario y un password, este seria el que usariamos para hacer login sobre la base de datos.

Connecting .NET API to ApsaraDB 2 with postgreSQL

8. Ahora creamos una nueva base datos donde usamos la cuenta que hemos creada anteriormente

Connecting .NET API to ApsaraDB 2 with postgreSQL

9. Finalmente, en Data security podemos agregar nuestra IP o 0.0.0.0/0 en la white list para poder acceder (Solamente debemos usar 0.0.0.0/0 para pruebas, por seguridad no debemos usarlo en producción)

Connecting .NET API to ApsaraDB 2 with postgreSQL

10. Ahora ya podemos ir a la clase program y agregar la configuracion para poder conectar con postgreSQL (program.cs):

// Add services to the container.
builder.Services.AddDbContext<TodoItemContext>(options =>
options.UseNpgsql("server=myserver.pg.rds.aliyuncs.com;database=todoitems;user id=user_1;password=mypassword")
);

11. Ejecuta la API usando dotnet run o utiliza visual studio y todo deberia funcionar bien

Revisa el repo con este demo creado:  github.com/Mteheran/dotnetapiapsaradb

Un comentario en «Conectando .NET con ApsaraDB»

Los comentarios están cerrados.