AspNet.MinimalApi
1.0.0
이 프로젝트의 초점은 SQL Lite 및 Entity 프레임 워크를 갖춘 최소 API 의 간단한 구현이었습니다.

EntityFramework
Flunt
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools
Swashbuckle.AspNetCore
프로그램 클래스에는 데이터베이스, JSON 입력 및 출력, SQL Lite Repository 및 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 구현은 Entity Framework Code First Approach에서 수행되었습니다.
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();
}
}
마이그레이션은 다음 명령으로 패키지 관리자 콘솔에 생성되어 적용되었습니다.
Add-Migration InitialMigration
Update-Database
이 구현이 도움이되거나 프로젝트에서 사용 된 경우 스타를 제공하십시오. 감사해요!