Der Schwerpunkt dieses Projekts lag eine einfache Implementierung von minimaler API mit SQL Lite und Entity Framework .

EntityFramework
Flunt
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools
Swashbuckle.AspNetCore
In der Programmklasse wurde eine Datenbank, eine JSON -Eingabe und -ausgabe, ein SQL Lite -Repository und eine Prahlerei konfiguriert.
//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();
Endpunkte wurden in der Programmklasse implementiert.
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);
Nach der Implementierung der Endpunkte müssen wir die Anwendung ausführen.
app.Run();
Die Anfragevalidierung wurde wie folgt mit dem Flunt -Paket durchgeführt:
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);
}
}
Die Implementierung von SQL Lite wurde mit dem ersten Ansatz des Entity Framework Code durchgeführt.
DBContext -Implementierung:
public class MovieDbContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
public MovieDbContext(DbContextOptions<MovieDbContext> options) : base(options) { }
}
Implementierung der Datenbankverbrauch:
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();
}
}
Die Migration wurde in der Paketmanagerkonsole mit den folgenden Befehlen erstellt und angewendet
Add-Migration InitialMigration
Update-Database
Wenn Sie diese Implementierung hilfreich fanden oder in Ihren Projekten verwendet werden, geben Sie ihr einen Stern. Danke!