Введение в работу с базами данных в 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 — мощные инструменты, каждый из которых имеет свои сильные стороны. Для начинающих разработчиков рекомендуется:
- Начать с PostgreSQL и Entity Framework Core для понимания реляционных баз и ORM.
- Затем изучить MongoDB для работы с NoSQL и гибкими схемами.
- Поэкспериментировать с обоими подходами на небольших проектах.
Практические навыки работы с базами данных — обязательный элемент портфолио любого .NET-разработчика. Начните с простых CRUD-операций, постепенно переходя к более сложным сценариям: транзакциям, индексации, агрегациям и оптимизации запросов.
Удачи в изучении C# и работе с базами данных!