< Web API

.Net Core Web Entity Framework

Szerző: Sallai András

Copyright © Sallai András, 2022

Licenc: CC Attribution-Share Alike 4.0 International

Web: https://szit.hu

Bevezetés

A Entity Framework Core könnyed hozzáférést biztosít az adatbázisokhoz.

Parancssoros eszköz használatához segítség:

https://docs.microsoft.com/en-us/ef/core/cli/dotnet

Előkészítés

dotnet tool install --global dotnet-ef

Adott verzió telepítése: dotnet tool install --global dotnet-ef --version 3.0 dotnet tool install --global dotnet-ef --version 5.0 dotnet tool install --global dotnet-ef --version 6.0 dotnet tool install --global dotnet-ef --version 7.0 dotnet tool install --global dotnet-ef --version 8.0 A parancsot felhasználóként kell kiadni Linuxon és Windowson is.

Hova telepszik?

Linux/macOS $HOME/.dotnet/tools

Windows %USERPROFILE%\.dotnet\tools

Linuxos Shellek

A dotnet-ef útvonalba helyezése:

Bash, zsh, csh vagy tcsh shell esetén:

bash/zsh:

export PATH="$PATH:$HOME/.dotnet/tools/"

csh/tcsh:

set path = ($path $HOME/.dotnet/tools/)

Függőségek

Adjuk a projekthez a függőségeket:

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Pomelo.EntityFrameworkCore.MySql

A Design kell a migrációs fájlok készítéséhez.

Nem működnek:A MySql.EntityFrameworkCore és MySql.Data.EntityFramework nem működik. Helyette ezt használjuk: Pomelo.EntityFrameworkCore.MySql Info: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql#2-services-configuration
Ha már van újabb keretrendszer, de nálunk például még csak 7.x van: dotnet add package Microsoft.EntityFrameworkCore.Design --version 7.0 dotnet add package Microsoft.EntityFrameworkCore --version 7.0 dotnet add package Pomelo.EntityFrameworkCore.MySql --version 7.0

Kapcsolat

{ "ConnectionStrings": { "DefaultConnection": "server=localhost;user=muni;password=titok;database=muni" } }
global using App01.Data; global using Microsoft.EntityFrameworkCore; global using Pomelo.EntityFrameworkCore.MySql; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddDbContext<DataContext>(options => { var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); var serverVersion = new MySqlServerVersion(new Version(8, 0, 27)); options.UseMySql(connectionString, serverVersion); }); //...

DataContext

using Microsoft.EntityFrameworkCore; namespace App01.Data { public class DataContext : DbContext { } }
using Microsoft.EntityFrameworkCore; using Pomelo.EntityFrameworkCore.MySql; namespace App01.Data { public class DataContext : DbContext { public DbSet<Employee> Employees { get; set; } = null!; public DataContext(DbContextOptions<DataContext> options) : base(options) {} } }

Migrációs fájlok készítése:

dotnet ef migrations add InitialCreate

Tábla létrehozása:

dotnet ef database update

API adatbázishoz kötése

using Microsoft.AspNetCore.Mvc; namespace App01.Controllers { [Route("api/[controller]")] [ApiController] public class EmployeeController : ControllerBase { private readonly DataContext _context; public EmployeeController(DataContext context) { _context = context; } [HttpGet] public async Task<ActionResult<List<Employee>>> Get() { return Ok(await _context.Employees.ToListAsync()); } [HttpGet("{id}")] public async Task<ActionResult<List<Employee>>> Get(int id) { var dbEmployee = await _context.Employees.FindAsync(id); if (dbEmployee == null) { return BadRequest("A dolgozó nem található"); } return Ok(dbEmployee); } [HttpPost] public async Task<ActionResult<List<Employee>>> AddEmployee(Employee employee) { _context.Employees.Add(employee); await _context.SaveChangesAsync(); return Ok(await _context.Employees.ToListAsync()); } [HttpPut] public async Task<ActionResult<List<Employee>>> UpdateEmployee(Employee request) { var dbEmployee = await _context.Employees.FindAsync(request.Id); if (dbEmployee == null) { return BadRequest("A dolgozó nem található"); } dbEmployee.Name = request.Name; dbEmployee.City = request.City; dbEmployee.Salary = request.Salary; await _context.SaveChangesAsync(); _context.Employees.Remove(dbEmployee); await _context.SaveChangesAsync(); return Ok(await _context.Employees.ToListAsync()); } [HttpDelete("{id}")] public async Task<ActionResult<List<Employee>>> Delete(int id) { var dbEmployee = await _context.Employees.FindAsync(id); if (dbEmployee == null) { return BadRequest("A dolgozó nem található"); } _context.Employees.Remove(dbEmployee); await _context.SaveChangesAsync(); return Ok(await _context.Employees.ToListAsync()); } } }

GitHub

https://github.com/andteki/muni