API와 ASP.NET MVC 6 및 SQL Server 중간 Entity Framework 코어 6 - Code First - Parte 2
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 mediantte 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.
Dicho esto, vamos a ello.
1. 크리아르 라 인테르파즈
Para esto, en nuestra carpeta Models vamos a crear una nueva carpeta llamada Repository, dentro de esta agregamos una interfaz que se llamamará IProductRepository.
Aquí vamos a agregar los métodos que tendrá nuestro CRUD.
namespace DemoAPI.Models.Repository
{
public interface IProductRepository
{
Task<Product> CreateProductAsync(Product product);
Task<bool> DeleteProductAsync(Product product);
Product GetProductById(int id);
IEnumerable<Product> GetProducts();
Task<bool> UpdateProductAsync(Product product);
}
}
2. 크레아 엘 레포지토리오
En la misma carpeta, Repository agregaremos una nueva clase y la llamaremos ProductRepository.
다음은 IProductRepository 인터페이스의 새로운 구현을 구현하는 것입니다. Aquí vamos a realizar nuestro CRUD. En este archivo vamos a realizar la conxión a nuestra base de datos, así no lo tenemos expuesto directamente en nuestro controlador y se verá de la siguiente manera.
using Microsoft.EntityFrameworkCore;
namespace DemoAPI.Models.Repository
{
public class ProductRepository : IProductRepository
{
protected readonly DemoContext _context;
public ProductRepository(DemoContext context) => _context = context;
public IEnumerable<Product> GetProducts()
{
return _context.Products.ToList();
}
public Product GetProductById(int id)
{
return _context.Products.Find(id);
}
public async Task<Product> CreateProductAsync(Product product)
{
await _context.Set<Product>().AddAsync(product);
await _context.SaveChangesAsync();
return product;
}
public async Task<bool> UpdateProductAsync(Product product)
{
_context.Entry(product).State = EntityState.Modified;
await _context.SaveChangesAsync();
return true;
}
public async Task<bool> DeleteProductAsync(Product product)
{
//var entity = await GetByIdAsync(id);
if (product is null)
{
return false;
}
_context.Set<Product>().Remove(product);
await _context.SaveChangesAsync();
return true;
}
}
}
3. 리포지토리 구성
새로운 인터페이스를 사용하는 사용자는 Program.cs 보관소에서 다음 구성을 실현하고 Entity Framework의 구성을 통합할 수 있습니다.
builder.Services.AddTransient<IProductRepository, ProductRepository>();
4. 컨트롤러 구성
Ya tenemos todo listo para crear nuestro controlador.
En la Carpeta Controlador agregamos un nuevo controlador y lo llamaremos ProductController.
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.
private IProductRepository _productRepository;
public ProductController(IProductRepository productRepository)
{
_productRepository = productRepository;
}
5. 새로운 컨트롤러와 메토도스 생성
API에 대한 정보는 중간에 Http vamos a etiquetar cada método a la acción que va a realizar, HttpGet para obtener Datas, HttpPost para hacer inserts, HttpPut para Editar datos 존재, HttpDelete para eliminar.
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.
using DemoAPI.Models;
using DemoAPI.Models.Repository;
using Microsoft.AspNetCore.Mvc;
namespace DemoAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ProductController : ControllerBase
{
private IProductRepository _productRepository;
public ProductController(IProductRepository productRepository)
{
_productRepository = productRepository;
}
[HttpGet]
[ActionName(nameof(GetProductsAsync))]
public IEnumerable<Product> GetProductsAsync()
{
return _productRepository.GetProducts();
}
[HttpGet("{id}")]
[ActionName(nameof(GetProductById))]
public ActionResult<Product> GetProductById(int id)
{
var productByID = _productRepository.GetProductById(id);
if (productByID == null)
{
return NotFound();
}
return productByID;
}
[HttpPost]
[ActionName(nameof(CreateProductAsync))]
public async Task<ActionResult<Product>> CreateProductAsync(Product product)
{
await _productRepository.CreateProductAsync(product);
return CreatedAtAction(nameof(GetProductById), new { id = product.Id }, product);
}
[HttpPut("{id}")]
[ActionName(nameof(UpdateProduct))]
public async Task<ActionResult> UpdateProduct(int id, Product product)
{
if (id != product.Id)
{
return BadRequest();
}
await _productRepository.UpdateProductAsync(product);
return NoContent();
}
[HttpDelete("{id}")]
[ActionName(nameof(DeleteProduct))]
public async Task<IActionResult> DeleteProduct(int id)
{
var product = _productRepository.GetProductById(id);
if (product == null)
{
return NotFound();
}
await _productRepository.DeleteProductAsync(product);
return NoContent();
}
}
}
Finalmente vamos a ejecutar nuestra Aplicación y vamos a probar que todo funcione correctamente.
Proyecto al crearse el proyecto, nuestra API viene integrada con Swagger, 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)
Primero vamos a probar nuestro método Post, ingresando un producto, en este caso simularemos el ingreso de un teclado.
Al darle a Execute tiene que darnos una respuesta, en este caso el código 200 para indicarnos que todo está correcto.
Finalmente vamos a probar nuestro Get y verificar que nuestro insertar funciono correctamente.
이제 모든 작업이 완료되었습니다. 새로운 API.
Muchas gracias por leerme y Nos vemos en e;)
Reference
이 문제에 관하여(API와 ASP.NET MVC 6 및 SQL Server 중간 Entity Framework 코어 6 - Code First - Parte 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/veronicaguamann/api-con-aspnet-mvc-6-y-sql-server-mediante-entity-framework-core-6-code-first-parte-2-4lbg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)