AspNet.MinimalApi
1.0.0
จุดสนใจของโครงการนี้คือการใช้ API ขั้นต่ำอย่าง ง่ายด้วย SQL Lite และ Framework Entity

EntityFramework
Flunt
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools
Swashbuckle.AspNetCore
ในคลาสโปรแกรมได้รับการกำหนดค่าฐานข้อมูลอินพุตและเอาต์พุต JSON ที่เก็บ SQL Lite และ Swagger
//builder config
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MovieDbContext>(op =>
op.UseSqlite("DataSource=app.db;Cache=Shared"));
builder.Services.Configure<JsonOptions>(opt =>
opt.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));
builder.Services.AddEndpointsApiExplorer().AddSwaggerGen();
builder.Services.AddScoped<MovieRepository>();
//app config
var app = builder.Build();
app.UseSwagger().UseSwaggerUI();
จุดสิ้นสุดถูกนำไปใช้ในคลาสโปรแกรม
app.MapGet("/movie", (MovieRepository repository) =>
{
var movies = repository.Get();
return Results.Ok(movies.Select(m => (MovieResponse)m));
}).Produces<IEnumerable<Movie>>(StatusCodes.Status200OK);
app.MapGet("/movie/{id}", (MovieRepository repository, Guid id) =>
{
var movie = repository.Get(id);
if (movie is null)
return Results.NotFound();
return Results.Ok((MovieResponse)movie);
}).Produces<Movie>(StatusCodes.Status200OK)
.Produces(StatusCodes.Status404NotFound);
app.MapPost("/movie", (MovieRepository repository, CreateMovieRequest request) =>
{
Movie movie = request;
if (!request.IsValid)
return Results.BadRequest(request.Notifications);
repository.Create(movie);
return Results.Created("/movie", (MovieResponse)movie);
}).Produces<Movie>(StatusCodes.Status201Created)
.Produces(StatusCodes.Status400BadRequest);
app.MapDelete("/movie/{id}", (MovieRepository repository, Guid id) =>
{
var movie = repository.Get(id);
if (movie is null)
return Results.NotFound();
repository.Delete(movie);
return Results.Accepted();
}).Produces(StatusCodes.Status202Accepted)
.Produces(StatusCodes.Status404NotFound);
หลังจากใช้จุดสิ้นสุดเราต้องเรียกใช้แอปพลิเคชัน
app.Run();
การตรวจสอบความถูกต้องของคำขอทำด้วยแพ็คเกจ Flunt ดังนี้:
public class CreateMovieRequest : Notifiable<Notification>
{
public string Name { get; set; }
public DateTime Released { get; set; }
[JsonConverter(typeof(JsonStringEnumConverter))]
public Genre Genre { get; set; }
public static implicit operator Movie(CreateMovieRequest request)
{
var contract = new Contract<Notification>()
.Requires()
.IsNotNull(request.Name, "Name is null")
.IsLowerOrEqualsThan(request.Released, DateTime.UtcNow, "Invalid date");
request.AddNotifications(contract);
return new Movie(Guid.NewGuid(), request.Name, request.Released, request.Genre);
}
}
การใช้งาน SQL Lite ได้ทำด้วยรหัสเอนทิตีเฟรมเวิร์กวิธีแรก
การใช้งาน DBContext:
public class MovieDbContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
public MovieDbContext(DbContextOptions<MovieDbContext> options) : base(options) { }
}
การใช้งานฐานข้อมูล:
public class MovieRepository
{
public MovieDbContext _dbContext { get; set; }
public MovieRepository(MovieDbContext movieDbContext)
{
_dbContext = movieDbContext;
}
public IEnumerable<Movie> Get() =>
_dbContext.Movies.ToArray();
public Movie Get(Guid id) =>
_dbContext.Movies.FirstOrDefault(c => c.Id == id);
public Movie Create(Movie movie)
{
_dbContext.Movies.Add(movie);
_dbContext.SaveChanges();
return movie;
}
public void Delete(Movie movie)
{
_dbContext.Movies.Remove(movie);
_dbContext.SaveChanges();
}
}
การโยกย้ายถูกสร้างและนำไปใช้ในคอนโซลแพ็คเกจ Manager พร้อมคำสั่งต่อไปนี้
Add-Migration InitialMigration
Update-Database
หากคุณพบว่าการใช้งานนี้มีประโยชน์หรือใช้ในโครงการของคุณให้ให้ดาว ขอบคุณ!