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.
Projenizi oluşturduktan sonra, Dapper kütüphanesini NuGet üzerinden ekleyin:
dotnet add package Dapper
dotnet add package Microsoft.Data.SqlClient
Ö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);
}
}
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; }
}
CRUD işlemleri için gerekli olan metotları UserService
sınıfında tanımlayacağız.
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.
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.
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.
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.
Ş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.");
}
}
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!