Работа с базами данных в C#: PostgreSQL и MongoDB на .NET

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

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

Начать курс

Работа с базами данных в C#: PostgreSQL и MongoDB — полное руководство для .NET-разработчика

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

1. Подключение к PostgreSQL из C# (.NET) с использованием Npgsql

PostgreSQL — мощная реляционная СУБД с открытым исходным кодом. Для работы с ней в .NET используется провайдер 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();

Console.WriteLine("Подключение к PostgreSQL установлено!");

Выполнение SQL-запросов: CREATE, INSERT, SELECT

Для выполнения команд используйте NpgsqlCommand. Рассмотрим создание таблицы и вставку данных:

using var cmd = new NpgsqlCommand();
cmd.Connection = conn;

// Создание таблицы
cmd.CommandText = @"
    CREATE TABLE IF NOT EXISTS users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(200) UNIQUE
    )";
cmd.ExecuteNonQuery();

// Вставка данных с параметрами
cmd.CommandText = "INSERT INTO users (name, email) VALUES (@name, @email)";
cmd.Parameters.AddWithValue("name", "Иван Петров");
cmd.Parameters.AddWithValue("email", "ivan@example.com");
cmd.ExecuteNonQuery();

// Чтение данных
cmd.CommandText = "SELECT id, name, email FROM users";
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
    Console.WriteLine($"{reader["id"]}: {reader["name"]} - {reader["email"]}");
}

Важно: всегда используйте параметризованные запросы для защиты от SQL-инъекций.

2. Работа с PostgreSQL через Entity Framework Core

Для более высокоуровневой работы рекомендуется Entity Framework Core (EF Core) с провайдером Npgsql. Установите пакеты:

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 string Email { get; set; }
}

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

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

// Использование
using var db = new AppDbContext();
db.Database.EnsureCreated();

var user = new User { Name = "Анна Смирнова", Email = "anna@example.com" };
db.Users.Add(user);
db.SaveChanges();

var users = db.Users.ToList();

EF Core автоматически генерирует SQL, управляет миграциями и упрощает сопровождение кода.

3. Подключение к MongoDB из C# (.NET) с помощью MongoDB.Driver

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

dotnet add package MongoDB.Driver

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

using MongoDB.Driver;
using MongoDB.Bson;

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

Console.WriteLine("Подключение к MongoDB установлено!");

CRUD-операции с документами

Вставка и чтение данных:

// Вставка документа
var document = new BsonDocument
{
    { "name", "Петр Иванов" },
    { "email", "petr@example.com" },
    { "age", 30 }
};
collection.InsertOne(document);

// Чтение всех документов
var filter = Builders<BsonDocument>.Filter.Empty;
var documents = collection.Find(filter).ToList();
foreach (var doc in documents)
{
    Console.WriteLine(doc.ToJson());
}

// Обновление
var updateFilter = Builders<BsonDocument>.Filter.Eq("name", "Петр Иванов");
var update = Builders<BsonDocument>.Update.Set("age", 31);
collection.UpdateOne(updateFilter, update);

// Удаление
collection.DeleteOne(updateFilter);

Работа с типизированными классами

Для удобства используйте POCO-классы. Добавьте атрибут BsonId для идентификатора:

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

var collectionTyped = database.GetCollection<User>("users");
var newUser = new User { Name = "Ольга", Email = "olga@example.com", Age = 25 };
collectionTyped.InsertOne(newUser);

var allUsers = collectionTyped.Find(u => true).ToList();

4. PostgreSQL vs MongoDB: когда что выбирать?

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

  • PostgreSQL — идеальна для структурированных данных с чёткими связями (финансовые системы, CRM, ERP). Поддерживает сложные JOIN, транзакции ACID, хранимые процедуры.
  • MongoDB — подходит для гибких схем, быстрого прототипирования, хранения JSON-подобных документов (логи, каталоги товаров, социальные сети). Легко масштабируется горизонтально.

В .NET-экосистеме обе базы имеют отличную поддержку. Для PostgreSQL используйте Npgsql или EF Core; для MongoDB — MongoDB.Driver с LINQ-подобным синтаксисом.

Заключение

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

Блоги

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