Посев данных в базу данных — это одна из тех задач, с которыми сталкивается бэкенд-разработчик, когда ему необходимо инициализировать API, который он создает на этапе разработки. Это дает бэкенд- и фронт-энд-командам данные для работы и, в определенной степени, необходимую интеграцию. Это облегчает работу front-end команды по интеграции с данным API без обращения к макетам.
В этой небольшой заметке я покажу вам, как с помощью ASP.NET 6 Web API залить данные в любую базу данных.
Первоначальная настройка
После создания Web API вам необходимо добавить пакеты Entity Framework NuGet:
dotnet add package Microsoft.EntityFrameworkCore --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.Abstractions --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.Analyzers --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.Design --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.InMemory --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 6.0.3
dotnet add package Microsoft.EntityFrameworkCore.Tools --version 6.0.3
Добавить сущность
Затем вы создаете сущность, которая будет использоваться API. Здесь я использовал модель WeatherForecast по умолчанию, которая поставляется с новым проектом Web API из предыдущего шага.
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
}
Добавьте ApplicationDbContext
using Microsoft.EntityFrameworkCore;
namespace SeedWebApplication.Data.Context
{
#nullable disable
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
{
}
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<WeatherForecast> WeatherForecasts { get; set; }
}
}
Создайте класс seed
Это класс, который добавляет несколько записей в вашу базу данных.
namespace SeedWebApplication.Data
{
public static class SeedData
{
public static void PopulateDb(IApplicationBuilder app)
{
using var serviceScope = app.ApplicationServices.CreateScope();
AddInitialData(serviceScope.ServiceProvider.GetService<ApplicationDbContext>()!);
}
private static void AddInitialData(ApplicationDbContext context)
{
if (!context.WeatherForecasts.Any())
{
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
var seedForecasts = Enumerable.Range(1, 20).Select(index =>
new WeatherForecast
{
Id = Guid.NewGuid(),
Date = DateTime.Now.AddDays(index),
Created = DateTime.Now.AddDays(-7),
Updated = DateTime.Now.AddDays(-5),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
})
.ToList();
context.WeatherForecasts.AddRange(seedForecasts);
context.SaveChanges();
Console.WriteLine("Seeded data to the Database");
}
}
}
}
Измените файл program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseInMemoryDatabase("inmemo"));
var app = builder.Build();
SeedData.PopulateDb(app);
app.Run();
И да, вы успешно засеяли данные в вашу базу данных!
Исходный код для полного решения можно найти на моем Github
До следующего раза, возлюби ближнего своего, возлюби себя!