.NET Core ve Dapper ile CRUD İşlemleri: Hızlı ve Etkili Veri Yönetimi

Veritabanı işlemleri, modern yazılım geliştirmede en önemli bileşenlerden biridir. .NET Core ile veritabanı işlemleri yaparken, Dapper gibi hafif ve hızlı bir mikro ORM kullanmak, performans gereksinimleri yüksek projelerde büyük avantaj sağlar. Bu yazıda, .NET Core ve Dapper kullanarak temel CRUD (Create, Read, Update, Delete) işlemlerinin nasıl gerçekleştirileceğini adım adım gösteriyoruz.

Veritabanı işlemleri, modern yazılım geliştirmede en önemli bileşenlerden biridir. .NET Core ile veritabanı işlemleri yaparken, Dapper gibi hafif ve hızlı bir mikro ORM kullanmak, performans gereksinimleri yüksek projelerde büyük avantaj sağlar. Bu yazıda, .NET Core ve Dapper kullanarak temel CRUD (Create, Read, Update, Delete) işlemlerinin nasıl gerçekleştirileceğini adım adım gösteriyoruz.

Dapper, büyük ORM araçlarının sunduğu özellikleri minimumda tutarak, veritabanı sorgularını daha hızlı ve verimli bir şekilde çalıştırmanızı sağlar. Eğer hızlı bir şekilde veri eklemek, güncellemek, silmek ve sorgulamak istiyorsanız, Dapper mükemmel bir tercihtir.

Yazının devamında, bir User tablosu örneği üzerinden .NET Core ve Dapper ile nasıl CRUD işlemleri yapabileceğinizi öğrenebilirsiniz. Bu işlemlerle, veri ekleme, okuma, güncelleme ve silme adımlarını kolayca uygulamaya koyabilirsiniz.

1. Proje Kurulumu

Projenizi oluşturduktan sonra, Dapper kütüphanesini NuGet üzerinden ekleyin:

dotnet add package Dapper
dotnet add package Microsoft.Data.SqlClient

2. Veritabanı Bağlantısı

Öncelikle bir bağlantı sınıfı oluşturmanız gerekiyor. Bu sınıf, veritabanı bağlantısını yönetecek.

using System.Data.SqlClient;

public class DatabaseService
{
    private readonly string _connectionString = "YourConnectionString";

    public SqlConnection GetConnection()
    {
        return new SqlConnection(_connectionString);
    }
}

3. Model Sınıfı (User)

User modelini oluşturuyoruz. Bu sınıf, veritabanındaki satırlara karşılık gelir.

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

4. CRUD İşlemleri

CRUD işlemleri için gerekli olan metotları UserService sınıfında tanımlayacağız.

Create (Veri Ekleme)

Yeni bir kullanıcı eklemek için InsertUser metodunu yazıyoruz:

using Dapper;
using System.Threading.Tasks;

public class UserService
{
    private readonly DatabaseService _databaseService;

    public UserService(DatabaseService databaseService)
    {
        _databaseService = databaseService;
    }

    public async Task<int> InsertUserAsync(User user)
    {
        using (var connection = _databaseService.GetConnection())
        {
            await connection.OpenAsync();
            var query = "INSERT INTO Users (Name, Age) VALUES (@Name, @Age); SELECT CAST(SCOPE_IDENTITY() AS INT);";
            var userId = await connection.QuerySingleAsync<int>(query, new { user.Name, user.Age });
            return userId;
        }
    }
}

Burada, yeni bir kullanıcı ekliyoruz ve eklediğimiz kullanıcının Id'sini geri döndürüyoruz. SCOPE_IDENTITY() fonksiyonu, son eklenen satırın Id değerini alır.

Read (Veri Okuma)

Mevcut tüm kullanıcıları listelemek için GetUsers metodunu yazıyoruz:

public async Task<IEnumerable<User>> GetUsersAsync()
{
    using (var connection = _databaseService.GetConnection())
    {
        await connection.OpenAsync();
        var query = "SELECT * FROM Users";
        return await connection.QueryAsync<User>(query);
    }
}

Bu metot, Users tablosundaki tüm kullanıcıları döndürür.

Update (Veri Güncelleme)

Bir kullanıcının bilgilerini güncellemek için UpdateUser metodunu yazıyoruz:

public async Task<bool> UpdateUserAsync(User user)
{
    using (var connection = _databaseService.GetConnection())
    {
        await connection.OpenAsync();
        var query = "UPDATE Users SET Name = @Name, Age = @Age WHERE Id = @Id";
        var rowsAffected = await connection.ExecuteAsync(query, new { user.Name, user.Age, user.Id });
        return rowsAffected > 0;
    }
}

Bu metot, verilen Id'ye sahip kullanıcıyı günceller. Eğer güncelleme işlemi başarılı olursa, true döner.

Delete (Veri Silme)

Bir kullanıcıyı silmek için DeleteUser metodunu yazıyoruz:

public async Task<bool> DeleteUserAsync(int userId)
{
    using (var connection = _databaseService.GetConnection())
    {
        await connection.OpenAsync();
        var query = "DELETE FROM Users WHERE Id = @Id";
        var rowsAffected = await connection.ExecuteAsync(query, new { Id = userId });
        return rowsAffected > 0;
    }
}

Bu metot, verilen Id'ye sahip kullanıcıyı siler ve silme işlemi başarılı olursa true döner.

5. Kullanım Örneği

Şimdi bu CRUD metodlarını nasıl kullanacağımızı görelim:

public class Program
{
    public static async Task Main(string[] args)
    {
        var databaseService = new DatabaseService();
        var userService = new UserService(databaseService);

        // Create
        var newUser = new User { Name = "John Doe", Age = 30 };
        var userId = await userService.InsertUserAsync(newUser);
        Console.WriteLine($"User created with Id: {userId}");

        // Read
        var users = await userService.GetUsersAsync();
        Console.WriteLine("Users:");
        foreach (var user in users)
        {
            Console.WriteLine($"Id: {user.Id}, Name: {user.Name}, Age: {user.Age}");
        }

        // Update
        var existingUser = new User { Id = userId, Name = "John Updated", Age = 35 };
        var updateSuccess = await userService.UpdateUserAsync(existingUser);
        Console.WriteLine(updateSuccess ? "User updated successfully." : "User update failed.");

        // Delete
        var deleteSuccess = await userService.DeleteUserAsync(userId);
        Console.WriteLine(deleteSuccess ? "User deleted successfully." : "User deletion failed.");
    }
}

Sonuç

Bu örnekte, Dapper kullanarak .NET Core uygulamanızda CRUD işlemleri gerçekleştirdik. CRUD işlemlerinin her biri, Dapper'ın ne kadar basit ve hızlı çalıştığını gösteriyor. Gördüğünüz gibi, veritabanı bağlantısını yönetmek ve SQL sorguları ile işlemleri gerçekleştirmek oldukça kolay.

Eğer daha fazla detay veya başka bir konuda yardım isterseniz, sormaktan çekinmeyin!