Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Queremos mejorar la calidad de nuestros cursos. Por favor ayúdanos llenando esta pequeña encuesta
NETCore Api + VueJs SPA: configurando nuestra Api con Entity Framework
Actualizado el 18 Enero, 2018 y leído 3,017 veces
Calificación: Sin calificar 10

NETCore Api + VueJs SPA: configurando nuestra Api con Entity Framework

Anexsoft

En esta primera parte vamos a crear un proyecto ASP.NET Core Web y crear una plantilla de Web Api sin autenticación. Luego de esto lo vamos a separar el proyhecto por capas agregando class libraries.

 

Model

Representa nuestro modelos de la capa de dominio, es decir las tablas mapeadas a clases.

namespace Model
{
    public class Student
    {
        public int StudentId { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public string Bio { get; set; }
    }
}

 

Persistence

Nuestra clase que será encargada de manejar las migraciones y la conexión a la base de datos. Para hacer funcionar esta parte debemos agregar los siguientes package del NuGet y luego crear nuestro DbContext.

  • EntityFrameworkCore.SqlServer
  • EntityFrameworkCore.Tools
public class StudentDbContext : DbContext
{
    public DbSet<Student> Student { get; set; }

    public StudentDbContext(DbContextOptions<StudentDbContext> options)
        : base(options)
    { }
}

No olvidemos registrar dicha dependencia en nuestro StartUp para que este disponible para todo el proyecto.

public void ConfigureServices(IServiceCollection services)
{
    var connection = Configuration.GetConnectionString("Dev");
    services.AddDbContext<StudentDbContext>(options => options.UseSqlServer(connection));

    services.AddTransient<IStudentService, StudentService>();

    services.AddMvc();
}

 

API

Nuestra capa REST que implementa los recursos a exponer como API.

namespace api.Controllers
{
    [Route("[controller]")]
    public class StudentController : Controller
    {
        private readonly IStudentService _studentService;

        public StudentController(IStudentService studentService)
        {
            _studentService = studentService;
        }

        // GET api/values
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(
                _studentService.GetAll()
            );
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public IActionResult Get(int id)
        {
            return Ok(
                _studentService.Get(id)
            );
        }

        // POST api/values
        [HttpPost]
        public IActionResult Post([FromBody] Student model)
        {
            return Ok(
                _studentService.Add(model)
            );
        }

        // PUT api/values/5
        [HttpPut]
        public IActionResult Put([FromBody] Student model)
        {
            return Ok(
                _studentService.Add(model)
            );
        }

        // DELETE api/values/5
        [HttpDelete("{id}")]
        public IActionResult Delete(int id)
        {
            return Ok(
                _studentService.Delete(id)
            );
        }
    }
}

Con respecto a las rutas no hemos escrito ni unas reglas, así que estamos usando el ruteo REST. En un proyecto real prefiero modificar la escritura desde el StartUp tal como lo genera un proyecto MVC.

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

 

Services

Nuestros servicios que vamos a declarar que se encargarán de realizar las consultas a la base de datos.

namespace Service
{
    public interface IStudentService
    {
        IEnumerable<Student> GetAll();
        bool Add(Student model);
        bool Delete(int id);
        bool Update(Student model);
        Student Get(int id);
    }

    public class StudentService : IStudentService
    {
        private readonly StudentDbContext _studentDbContext;

        public StudentService(
            StudentDbContext studentDbContext
        )
        {
            _studentDbContext = studentDbContext;
        }

        public IEnumerable<Student> GetAll()
        {
            var result = new List<Student>();

            try
            {
                result = _studentDbContext.Student.ToList();
            }
            catch (System.Exception)
            {
                
            }

            return result;
        }

        public Student Get(int id)
        {
            var result = new Student();

            try
            {
                result = _studentDbContext.Student.Single(x => x.StudentId == id);
            }
            catch (System.Exception)
            {

            }

            return result;
        }

        public bool Add(Student model)
        {
            try
            {
                _studentDbContext.Add(model);
                _studentDbContext.SaveChanges();
            }
            catch (System.Exception)
            {
                return false;
            }

            return true;
        }

        public bool Update(Student model)
        {
            try
            {
                var originalModel = _studentDbContext.Student.Single(x =>
                    x.StudentId == model.StudentId
                );

                originalModel.Name = model.Name;
                originalModel.LastName = model.LastName;
                originalModel.Bio = model.Bio;

                _studentDbContext.Update(originalModel);
                _studentDbContext.SaveChanges();
            }
            catch (System.Exception)
            {
                return false;
            }

            return true;
        }

        public bool Delete(int id)
        {
            try
            {
                _studentDbContext.Entry(new Student { StudentId = id }).State = EntityState.Deleted; ;
                _studentDbContext.SaveChanges();
            }
            catch (System.Exception)
            {
                return false;
            }

            return true;
        }
    }
}

¡Adquiera ya!

  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#
  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC

Últimas publicaciones

Encuesta

¿Cómo nos conociste?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2018 Anexsoft, blog y cursos online de TI.