Tartalomjegyzék

< Web API

.Net Core Web Entity Framework

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:

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?

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
Nem működnek:

A MySql.EntityFrameworkCore és MySql.Data.EntityFramework nem működik. Helyette ezt használjuk: Pomelo.EntityFrameworkCore.MySql

Info:

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

appsettings.Development.json
{
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;user=muni;password=titok;database=muni"
  }
}
Program.cs
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

Data/DataContext.cs
using Microsoft.EntityFrameworkCore;
 
namespace App01.Data
{
    public class DataContext : DbContext
    {
 
    }
}
Data/DataContext.cs
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

Controllers/EmployeeController.cs
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