Работа с базами данных в C#: PostgreSQL и MongoDB для начинающих

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение в работу с базами данных в C#

В современной разработке приложений работа с базами данных — один из ключевых навыков. C# (.NET) предоставляет мощные инструменты для взаимодействия как с реляционными (PostgreSQL), так и с документо-ориентированными (MongoDB) базами данных. В этой статье мы разберём основы подключения и выполнения CRUD-операций для обеих систем.

Статья предназначена для начинающих разработчиков, знакомых с основами C#. Мы рассмотрим как традиционный подход через SQL-запросы (Npgsql), так и современный ORM — Entity Framework Core, а также работу с MongoDB через официальный драйвер.

1. Работа с PostgreSQL в C#

PostgreSQL — мощная реляционная СУБД с открытым исходным кодом. Для работы с ней в .NET используется пакет Npgsql или Entity Framework Core с провайдером Npgsql.EntityFrameworkCore.PostgreSQL.

1.1 Подключение через Npgsql (низкоуровневый доступ)

Установите пакет через NuGet:

dotnet add package Npgsql

Пример простого подключения и выполнения запроса:

using Npgsql;

string connectionString = "Host=localhost;Port=5432;Database=mydb;Username=user;Password=pass";

using var conn = new NpgsqlConnection(connectionString);
conn.Open();

string sql = "SELECT id, name, age FROM users WHERE age > @minAge";
using var cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("minAge", 18);

using var reader = cmd.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine($"ID: {reader["id"]}, Name: {reader["name"]}, Age: {reader["age"]}");
}

1.2 Использование Entity Framework Core с PostgreSQL

Установите пакеты:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL

Создайте модель и контекст:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

public class AppDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql("Host=localhost;Database=mydb;Username=user;Password=pass");
    }
}

CRUD-операции через EF Core:

using var db = new AppDbContext();

// Create
db.Users.Add(new User { Name = "Анна", Age = 25 });
db.SaveChanges();

// Read
var users = db.Users.Where(u => u.Age > 20).ToList();

// Update
var user = db.Users.First();
user.Age = 30;
db.SaveChanges();

// Delete
db.Users.Remove(user);
db.SaveChanges();

2. Работа с MongoDB в C#

MongoDB — NoSQL база данных, хранящая данные в формате BSON-документов. Для C# используется официальный драйвер MongoDB.Driver.

2.1 Установка и настройка подключения

Установите пакет:

dotnet add package MongoDB.Driver

Подключение к локальному серверу MongoDB:

using MongoDB.Driver;

var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("mydb");
var collection = database.GetCollection<BsonDocument>("users");

2.2 CRUD операции с MongoDB

Создайте класс модели:

public class User
{
    public MongoDB.Bson.ObjectId Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

Пример работы с коллекцией:

var collection = database.GetCollection<User>("users");

// Create
var newUser = new User { Name = "Иван", Age = 30 };
collection.InsertOne(newUser);

// Read
var filter = Builders<User>.Filter.Eq(u => u.Name, "Иван");
var user = collection.Find(filter).FirstOrDefault();

// Update
var update = Builders<User>.Update.Set(u => u.Age, 31);
collection.UpdateOne(filter, update);

// Delete
collection.DeleteOne(filter);

2.3 Фильтрация и проекции

MongoDB поддерживает сложные запросы:

// Фильтр по возрасту
var ageFilter = Builders<User>.Filter.Gt(u => u.Age, 18);
var adults = collection.Find(ageFilter).ToList();

// Проекция (выбор полей)
var projection = Builders<User>.Projection
    .Include(u => u.Name)
    .Exclude(u => u.Id);
var names = collection.Find(FilterDefinition<User>.Empty)
    .Project(projection)
    .ToList();

3. Сравнение PostgreSQL и MongoDB для C# проектов

Выбор между реляционной и NoSQL базой зависит от требований проекта:

  • PostgreSQL — идеально подходит для проектов с чёткой схемой данных, сложными связями между таблицами и необходимостью ACID-транзакций. Рекомендуется для финансовых систем, CRM, ERP.
  • MongoDB — лучше подходит для проектов с гибкой схемой данных, быстрым прототипированием, большими объёмами неструктурированных данных. Часто используется в IoT, логах, каталогах товаров.

В C# (.NET) обе технологии имеют отличную поддержку. PostgreSQL через EF Core даёт привычный ORM-подход, а MongoDB.Driver предоставляет гибкий API для работы с документами.

Заключение

В этой статье мы рассмотрели основы работы с двумя популярными базами данных в C#. PostgreSQL и MongoDB — мощные инструменты, каждый из которых имеет свои сильные стороны. Для начинающих разработчиков рекомендуется:

  1. Начать с PostgreSQL и Entity Framework Core для понимания реляционных баз и ORM.
  2. Затем изучить MongoDB для работы с NoSQL и гибкими схемами.
  3. Поэкспериментировать с обоими подходами на небольших проектах.

Практические навыки работы с базами данных — обязательный элемент портфолио любого .NET-разработчика. Начните с простых CRUD-операций, постепенно переходя к более сложным сценариям: транзакциям, индексации, агрегациям и оптимизации запросов.

Удачи в изучении C# и работе с базами данных!

Блоги

Рекомендаций по книгам