ASP.NET Core'da Veri Tabanı İşlemleri Nasıl Yapılır?

ASP.NET Core'da Veri Tabanı İşlemleri Nasıl Yapılır?

ASPNET Core'da veri tabanı işlemleri hakkında bilgi edinmek için bu makaleyi okuyun Veri tabanı bağlantıları, sorgular ve ORM kullanımı gibi konular ele alınmaktadır ASPNET Core ile veri tabanı işlemlerini kolayca yapabilirsiniz

ASP.NET Core'da Veri Tabanı İşlemleri Nasıl Yapılır?

ASP.NET Core, web uygulamaları geliştirmek için kullanılan bir frameworktür. Bu framework, veri tabanı işlemlerinde Entity Framework Core teknolojisini kullanır. Entity Framework Core, veri tabanı işlemlerinde, nesne yönelimli programlama yaklaşımını benimseyen bir ORM aracıdır.

Bu makalede, ASP.NET Core ile veri tabanı işlemlerinin nasıl yapılabileceği anlatılmaktadır. Veri tabanı oluşturma, migration işlemleri, seed verileri oluşturma ve CRUD işlemleri bu makalede ele alınacaktır. Ayrıca, Azure SQL veri tabanına nasıl bağlanılır ve veri tabanı işlemleri nasıl yapılır konusu da açıklanacaktır.


Entity Framework Core Nedir?

Entity Framework Core Nedir?

Entity Framework Core, .NET geliştiricileri için açık kaynak kodlu bir ORM (Object-Relational Mapping) aracıdır. Bu araç, .NET geliştiricilerinin veri tabanlarına erişmesini ve veri tasarımını yönetmesini kolaylaştırmak için kullanılır. Entity Framework Core, verilerin veri tabanından alınmasını ve uygulamalarda kullanılabilmesini sağlar. Ayrıca, geliştiricilerin veri tabanı işlemleri yaparken SQL bilgisi gerektirmeksizin kolay bir şekilde yönetmelerini sağlar.

Entity Framework Core, birçok veri tabanı yönetim sistemiyle uyumludur. Bunlar arasında SQL Server, SQLite, MySQL ve PostgreSQL bulunur. Bu sayede, birçok farklı veri tabanı yönetim sistemi kullanılsa bile, aynı kod tabanı Entity Framework Core ORM ile uyumlu bir şekilde çalışabilir.


Veri Tabanı Oluşturma

ASP.NET Core, veri tabanı işlemlerinde Entity Framework Core kullanabilirsiniz. Bunun için ilk olarak veri tabanı oluşturulmalıdır. Entity Framework Core, veri tabanı oluşturma işlemini Code First yöntemiyle yapar. Yani, önce model oluşturulur ve bu modelden veri tabanı şeması otomatik olarak oluşturulur. Model oluşturma işlemi yapıldıktan sonra ‘PM> Add-Migration {MigrationName}’ komutu çalıştırarak migration işlemi yapılır. Migration işlemi sonrasında veriler tabloya otomatik olarak yerleştirilir. Ayrıca migration işlemi, veri tabanı şemasında bir değişiklik yapıldığında tekrar çalıştırılabilir.

Aşağıdaki kod örneğinde, ‘Product’ adında bir sınıf oluşturulur ve bu sınıfın özellikleri ‘Id’, ‘Name’ ve ‘Price’ olarak tanımlandıktan sonra migration işlemi yapılır. Sonrasında veriler, otomatik olarak ilgili tabloya yerleştirilir.

Sınıf Adı Özellik Adı Veri Türü
Product Id int
Name string
Price double

PM> Add-Migration InitialCreate

Migration işlemi sonrasında veritabanı şeması otomatik olarak oluşacaktır. Yine ‘PM> Update-Database’ komutu çalıştırılarak veri tabanı güncellenir.

Ayrıca, migration işlemi sonrasında Seed verileri de yerleştirilebilir. Seed verileri, veri tabanına varsayılan olarak atanacak verilerdir. Bu veriler migration işlemi sırasında otomatik olarak veri tabanına yerleştirilir. Bu işlem, veri tabanı ilk oluşturulduğunda kullanışlıdır. Seed verileri, Entity Framework Core tarafından otomatik olarak tanınır. Yani, bir Seed verisi oluşturulduktan sonra, örneğin, migration işlemi yapıldığında bu veri de tabloya otomatik olarak yerleştirilir.


Migration Oluşturma

Migration, veri tabanı işlemlerinde oldukça önemli bir kavramdır. Migration, veri tabanındaki modellerin veri tabanına uygulanması veya geri alınması için gereken işlemler bütünüdür. Migration oluşturmak için öncelikle veri tabanı bağlantısı sağlanmalıdır. Bunun için, Startup.cs dosyasında ConfigureServices metodu içinde AddDbContext() metodu kullanılarak veri tabanı bağlantısı ayarları yapılmalıdır.

Migration oluşturmak için ise dotnet ef migrations add Migration Adı komutu kullanılmalıdır. Bu komutla birlikte veri tabanında yapılacak değişiklikler Migration adı verilen bir dosyada kaydedilir. Migration oluşturulduktan sonra, Update-Database komutu ile veri tabanında değişiklikler gerçekleştirilir.

Migration işlemleri özellikle büyük projelerde ve birden fazla geliştiricinin çalıştığı projelerde oldukça kullanışlıdır. Ayrıca, veri tabanında yapılacak değişikliklerin başarıyla uygulanıp uygulanmadığı test etmek için migration kullanılabilir. Dotnet ef database update Migration Adı komutu ile veri tabanında bir Migration adı seçilerek değişiklikler yapılmış veri tabanına geri dönüş yapılabilir.


Add-Migration ve Update-Database Komutları

ASP.NET Core uygulamalarında Code First Migration kullanarak veritabanı ile uyumlu hale getirebilirsiniz. Bunun için Add-Migration ve Update-Database Komutlarını kullanabilirsiniz.

Add-Migration Komutu:

Veritabanınızda yapmanız gereken değişikliklerin bir Migration dosyasına dönüştürülmesini sağlar. İlk defa bir migration dosyası oluşturabilmek için uygulamanızın ilk hali ile veritabanı arasında farklılık olması gerekmektedir.

Command Line:

Komut Açıklama
dotnet ef migrations add <MigrationName> Yeni bir migration dosyası oluşturur.

Update-Database Komutu:

Migration dosyalarının veritabanına yüklenmesini sağlar. Bu sayede veritabanınızın son hali Migration dosyalarına uyumlu hale gelir.

Command Line:

Komut Açıklama
dotnet ef database update Migration dosyalarını veritabanına yükler.

Her migration dosyası için bir tane update işlemi yapmanız yeterlidir. Böylece her şey güncel kalmış olur.

Bu komutlarla veritabanınız üzerinde yapacağınız değişiklikleri migration dosyaları aracılığıyla gerçekleştirebilirsiniz. Bu sayede veritabanınızın yapısını veya herhangi bir tablosunu güncellemeniz mümkün olur. Ayrıca, geri alma işlemi de yapabilirsiniz.


Seed Verileri Oluşturma

ASP.NET Core uygulamalarında kullanmak için veri tabanına örnek veriler eklemek gerekebilir. Bu örnek veriler, uygulamanın başlangıcında veri tabanına eklenir ve sonra da CRUD işlemleri yapmak için kullanılır. Bu işlem veri tabanının kolayca test edilebilmesini ve eklenen verilerin doğrumluğunun kontrol edilmesini sağlar. Örnek veriler, veri tabanında bulunması gereken minimum bir veri kümesidir.

Seed verileri, Entity Framework Core için belirli bir API kullanarak tanımlanabilir. Bu API, DbContext'teki tek bir metotla kullanılabilir. Seed verileri oluşturmaya başlamak için, DbContext'in Configure metodunda verilerin nasıl tanımlandığını belirtmek için bir DbSet propertysi kullanılır. Bu veriler, özel bir IConfiguration aracılığıyla veya birkaç sabit ya da oluşturulmuş nesneyle yüklenebilir.

Seed verileri, Startup.cs sınıfının Configure metodunda yer alan bir extension yöntemi kullanılarak özelleştirilebilir. Seed işlemini gerçekleştirmek için, Configure metoduna ApplicationDbContext tipindeki bir nesnenin eklenmesi gereklidir. Seed verileri migration işleminin kullanılması sırasında veya ayrı bir komut ile belirli verilerin eklenmesi gerektiğinde kullanılabilir.

Aşağıdaki örnek, Seed verilerinin nasıl oluşturulup kullanılacağına dair detaylı bilgi verecektir.

Ad Email
John john@gmail.com
Jane jane@hotmail.com

Yukarıda bulunan örnek bir Seed verisi listesidir. Seed verisi oluştururken, veri kümesini hazırladıktan sonra aşağıdaki örnekteki gibi Seed metodu kullanılır:

modelBuilder.Entity<Person>().HasData(    new Person { Id = 1, Name = "John", Email = "john@gmail.com" },    new Person { Id = 2, Name = "Jane", Email = "jane@hotmail.com" });

Yukarıdaki satır, Person tablosuna iki örnek veri ekler. Her kayıt, bir nesne oluşturarak ve DbSet'in HasData yöntemi kullanılarak eklenir.

Seed verileri, DbContext'in Konfigure metodu içinde tanımlanabilir. Seed verileri Fluent API ile de tanımlanabilir. Seed verileri sorgulama işlemi gerçekleştirirken ve test verileri oluştururken kullanışlı olabilir.


CRUD İşlemleri

Bir veri tabanı oluşturduktan sonra, CRUD işlemleri olmadan veritabanı kullanımı eksik kalır. CRUD terimi, veritabanında yer alan verilerin oluşturulması (Create), okunması (Read), güncellenmesi (Update) ve silinmesi (Delete) işlemlerini ifade etmektedir. Burada, basit bir örnek ile CRUD işlemlerinin nasıl yapılacağını inceleyebiliriz.

Öncelikle, oluşturulan veritabanına veri kaydı eklemek için bir controller ve bir view oluşturulur. Bu sayede, bir form hazırlanarak istenilen veriler alınır ve veritabanına kaydedilir. Aşağıdaki kod parçası ile kayıt oluşturma işlemi gerçekleştirilir.

HTTP Method URL Action
GET /students/create Create() method
POST /students/create Create(Student student) method

Veri kaydını güncelleme işlemi de benzer şekilde gerçekleştirilir. Öncelikle, güncellenecek veri kaydını getiren bir controller ve view oluşturulur. Bu sayede, kullanıcıya güncelleme için gerekli alanlar sunulur ve bu alanlar doldurularak veri güncelleme işlemi gerçekleştirilir. Aşağıdaki kod parçası ile kayıt güncelleme işlemi gerçekleştirilir.

HTTP Method URL Action
GET /students/edit/{id} Edit(int id) method
POST /students/edit/{id} Edit(Student student) method

Veri kaydını silmek için, oluşturulacak controller ve view dosyalarından yararlanılır. Veri kaydını silmek istediğimizde, silinecek datanın ID'si ile yapılan işlem sonucunda veri tabanından silinir. Kod parçası aşağıdaki gibi olacaktır.

HTTP Method URL Action
GET /students/delete/{id} Delete(int id) method

Yukarıdaki örnekte olduğu gibi, CRUD işlemleri ile veritabanında oluşturulan verilerin yönetimi oldukça kolaydır. Bu işlemlerle, verilerin güncellenmesi, silinmesi veya yenilerinin oluşturulması kolayca gerçekleştirilebilir.


Azure SQL Veri Tabanına Bağlanma

Azure SQL veri tabanına bağlanarak veri tabanı işlemleri yapmak oldukça önemlidir. Bunun için öncelikle, Connection String oluşturmamız gerekiyor. Connection String, veritabanına bağlanmak için kullanılan ve veri tabanı sunucusunun adı, kullanıcı adı, şifre gibi bilgileri içeren bir yapıdır. Bu yapıyı oluşturmak için projemiz içerisinde appsettings.json dosyasında aşağıdaki gibi bir tanımlama yapabiliriz:

{  "ConnectionStrings": {    "DefaultConnection": "Server=tcp:serveradi.database.windows.net,1433;Initial Catalog=veritabaniadi;Persist Security Info=False;User ID=kullaniciadi;Password=sifre;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"  },}

Bu yapıyı oluşturduktan sonra, Startup.cs dosyasında ConfigureServices metodu içinde aşağıdaki gibi bir tanımlama yaparak Dependency Injection özelliğini kullanarak veri tabanına bağlanabiliriz:

services.AddDbContext<ApplicationContext>(options =>    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

Bu işlem ile artık uygulamamızda Azure SQL veri tabanına bağlanarak veri tabanı işlemleri yapabiliriz. Örneğin, verileri çekmek için aşağıdaki gibi bir örnek kod bloğu kullanabiliriz:

public IActionResult Index(){    var liste = _context.Musteriler.ToList();    return View(liste);}

Bu örnekte, Azue SQL veri tabanındaki Musteriler tablosundan tüm müşteri verilerini çektik ve bu verileri Index sayfasında bir listeleyiciye aktardık. Benzer şekilde, veri ekleme, güncelleme ve silme işlemlerini de kolaylıkla yapabiliriz.


Connection String Oluşturma

Azure SQL veri tabanına bağlanmak için, Web.config dosyanızın connectionStrings kısmına doğru bilgilerinizi girmeniz gerekmektedir. Öncelikle Azure SQL sunucusuna bağlanmak için gerekli olan server name, database name, user ID ve password gibi bilgileri almanız gerekiyor. Bu bilgileri aldıktan sonra aşağıdaki adım adım işlemleri takip ederek, connection string'inizi oluşturabilirsiniz.

  1. Web.config dosyanızı açın
  2. connectionStrings etiketinin içine girin
  3. <add name="DefaultConnection" connectionString="" providerName="System.Data.SqlClient"/> satırını ekleyin
  4. connectionString değeri boş bir şekilde kaldı.
  5. Bu değere, Azure SQL sunucusuna bağlantı için gereken bilgileri girmelisiniz. Örnek olarak bağlantı metnini şu şekilde düzenleyebilirsiniz:
    Data Source=servername.database.windows.net;Initial Catalog=databasename;Integrated Security=False;User ID=username;Password=password;Connect Timeout=60;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

Data Source kısmı, Azure SQL sunucusunun adını belirtir. Initial Catalog kısmında veri tabanınızın adını, User ID ve Password kısımlarında sunucu için verilen kullanıcı adı ve şifresini, Connect Timeout kısmında ise sunucuya bağlantı timeout süresini belirtmelisiniz. Gerekli bilgileri girdikten sonra, connection string'iniz hazır hale gelmiş olacaktır.


Dependency Injection

Dependency Injection, bir uygulamanın bileşenlerinin bağımlılıklarının dışarıdan enjekte edilmesini sağlayan bir yazılım tasarım desenidir. Basitçe söylemek gerekirse, bir bileşenin ne kullandığına bağlı olarak diğer bileşenlerden bağımsız olması gerektiğini söyler. Bu, kodun daha sürdürülebilir ve daha kolay bir şekilde test edilebilmesini sağlar.

Bir ASP.NET Core uygulamasında Dependency Injection, Microsoft.Extensions.DependencyInjection paketi kullanılarak yapılandırılır. Dependency Injection ile Azure SQL veri tabanına bağlanmak için, bağımlılık enjeksiyonu yöntemi kullanılarak IConfiguration tarafından yapılandırılan bir connection string'e erişmek gerekir. Ayrıca, bu yöntemle Entity Framework Core da kullanılabilir.

Bir IServiceCollection nesnesi kullanarak, servisler ve bunların bağımlılıkları yapılandırılır. Aşağıdaki örnekte, ConfigureServices yöntemi içinde ConfigureServices(IServiceCollection services) aracılığıyla SqlServer örneğini tanımlıyoruz. Bu örnekte, bağlantı dizesi appsettings.json dosyasından alınıyor.

ConfigureServices = Kod
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<YourDbContext>(opt =>  opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    IConfiguration Configuration { get; }
    services.AddControllers();
}

Bağımlılıkları enjekte etmek için Azure SQL veri tabanına bağlanan bir repository örneği yazalım. Aşağıdaki örnek, DbContext'in bir örneğini tanımlar ve IDiaryRepository arayüzünü uygular:

IDiaryRepository = Arayüz
public interface IDiaryRepository
{
List<Diary> GetAll();
}
DiaryRepository = Class
public class DiaryRepository : IDiaryRepository    {        private readonly YourDbContext _context;        public DiaryRepository(YourDbContext context)        {            _context = context;        }        public List<Diary> GetAll()        {            return _context.Diaries.ToList();        }    }

Dependency Injection, ConfigureServices metodu tarafından konfigüre edilen servislerin kurulumunu sağlar. Kodumuzda, servis olarak AddDbContext metodu kullanarak MyDbContext sınıfımızı Configuration GetConnectionString altında bulunan bir connection string'e bağladık. Service'e bağlı olarak, MyDbContext objemizin yönetimine izin verecek bir DbContext nesnesi isteyebiliriz ve Dependency Injection tarafından sağlanacaktır.

Sonuç olarak, Dependency Injection işlemiyle, Azure SQL veri tabanına bağlanan bir ASP.NET Core uygulaması yazmak oldukça kolay ve sürdürülebilir hale gelir. Bu işlem, kodun daha iyi organize edilmesini ve bağımlılıkların daha kolay yönetilmesini sağlar.