← Назад к вопросам

Приведи пример использования SQL баз данных

1.0 Junior🔥 291 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Пример использования SQL-баз данных в Backend-разработке на C#

SQL-базы данных — это реляционные хранилища данных, которые широко используются в бэкенд-разработке для управления структурированной информацией. Ниже приведён пример использования SQL Server в приложении на C# с применением Entity Framework Core — популярного ORM (Object-Relational Mapper), который упрощает взаимодействие с базой данных.

Архитектура примера

Пример представляет собой простое CRUD-приложение (Create, Read, Update, Delete) для управления списком пользователей. Мы используем подход Code-First, где сначала определяем модели C#, а затем на их основе создаём структуру базы данных.

1. Определение модели данных

Создаём класс User, который будет соответствовать таблице Users в базе данных:

public class User
{
    public int Id { get; set; } // Первичный ключ
    public string Name { get; set; }
    public string Email { get; set; }
    public DateTime CreatedAt { get; set; }
}

2. Создание контекста базы данных

Контекст базы данных в Entity Framework Core представляет сессию с базой данных, позволяя запрашивать и сохранять данные:

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public DbSet<User> Users { get; set; } // Таблица Users

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // Строка подключения к SQL Server (локальный экземпляр)
        optionsBuilder.UseSqlServer(@"Server=localhost;Database=UserDb;Trusted_Connection=True;Encrypt=False;");
    }
}

3. Миграции и создание базы данных

Entity Framework Core использует миграции для управления изменениями схемы базы данных. Выполняем в консоли диспетчера пакетов:

Add-Migration InitialCreate
Update-Database

После этого в SQL Server создастся база данных UserDb с таблицей Users, где колонки соответствуют свойствам класса User.

4. Реализация репозитория для работы с данными

Создаём класс UserRepository, который инкапсулирует логику доступа к данным:

public class UserRepository
{
    private readonly ApplicationDbContext _context;

    public UserRepository(ApplicationDbContext context)
    {
        _context = context;
    }

    // CREATE: Добавление нового пользователя
    public async Task AddUserAsync(User user)
    {
        user.CreatedAt = DateTime.UtcNow;
        await _context.Users.AddAsync(user);
        await _context.SaveChangesAsync();
    }

    // READ: Получение всех пользователей
    public async Task<List<User>> GetAllUsersAsync()
    {
        return await _context.Users.ToListAsync();
    }

    // UPDATE: Обновление данных пользователя
    public async Task UpdateUserAsync(User user)
    {
        _context.Users.Update(user);
        await _context.SaveChangesAsync();
    }

    // DELETE: Удаление пользователя по ID
    public async Task DeleteUserAsync(int id)
    {
        var user = await _context.Users.FindAsync(id);
        if (user != null)
        {
            _context.Users.Remove(user);
            await _context.SaveChangesAsync();
        }
    }
}

5. Использование в контроллере ASP.NET Core

Интегрируем репозиторий в контроллер веб-API для обработки HTTP-запросов:

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    private readonly UserRepository _repository;

    public UsersController(UserRepository repository)
    {
        _repository = repository;
    }

    [HttpGet]
    public async Task<IActionResult> GetUsers()
    {
        var users = await _repository.GetAllUsersAsync();
        return Ok(users);
    }

    [HttpPost]
    public async Task<IActionResult> CreateUser([FromBody] User user)
    {
        await _repository.AddUserAsync(user);
        return CreatedAtAction(nameof(GetUsers), new { id = user.Id }, user);
    }
}

Преимущества использования SQL баз данных в C# Backend:

  • Целостность данных: SQL базы обеспечивают ACID-транзакции (Atomicity, Consistency, Isolation, Durability), что критично для финансовых и критичных систем.
  • Сложные запросы: Язык SQL позволяет выполнять сложные выборки с джойнами, агрегациями и фильтрацией, как в примере ниже:
SELECT u.Name, COUNT(o.Id) as OrderCount
FROM Users u
LEFT JOIN Orders o ON u.Id = o.UserId
WHERE u.CreatedAt > '2024-01-01'
GROUP BY u.Name
HAVING COUNT(o.Id) > 5
  • Безопасность: Возможность настройки прав доступа на уровне таблиц и процедур.
  • Интеграция с экосистемой .NET: SQL Server, PostgreSQL, MySQL отлично поддерживаются через Entity Framework Core с такими функциями как ленивая загрузка (Lazy Loading), явная загрузка (Eager Loading) и трекинг изменений.

Типичные сценарии использования в продакшене:

  • Электронная коммерция: Хранение данных о пользователях, заказах, товарах.
  • Финансовые системы: Управление транзакциями, счетами, отчётами.
  • Контент-менеджмент: Блоги, статьи, медиа-библиотеки.
  • Аналитические платформы: Сбор и анализ структурированных данных.

Этот пример демонстрирует базовую интеграцию SQL базы данных в C# приложение, но в реальных проектах важно дополнять его паттернами Unit of Work, репозиториями, миграциями данных и оптимизацией запросов для обеспечения производительности и поддерживаемости кода.