Bu makalede, C# ve ASPNET Core MVC kullanarak veritabanına nasıl bağlanılacağı anlatılmaktadır MVC modeli, veri işleme mantığını ayrı bir katmana taşımakta ve veritabanına erişimi kolaylaştırmaktadır Entity Framework, veritabanı işlemleri için kullanılan bir ORM aracıdır ve DbContext sınıfı, temel bir yapılandırma aracıdır Migration işlemleri, veritabanında değişiklik yapmak için kullanılır ve CRUD işlemleri, veritabanı işlemlerinin temelini oluşturur Dependency Injection, bağımlılıkların yönetiminde kullanılan bir tasarım kalıbıdır ve veritabanına erişmek için kullanılan Service ve Repository katmanlarıyla birlikte kullanılır Bu makaledeki bilgiler, ASPNET Core MVC'te veritabanına erişmek isteyenlere yol gösterici bir kaynak olacaktır

Bu makalede C# ve ASP.NET Core MVC kullanılarak veritabanına nasıl bağlanılacağı ele alınacaktır. MVC (Model-View-Controller) modeli, ASP.NET Core MVC'de veritabanına erişmek için kullanılan temel bir modeldir. Bu modelde, veri işleme mantığı ayrı bir katmana taşınır ve böylece MVC uygulamasının daha iyi bir şekilde ölçeklenebilmesine olanak tanır.
Entity Framework, veritabanına erişmenin bir diğer yolu olarak kullanılabilir. Bu araç, .NET platformunda veritabanı işlemlerini yönetmek için kullanılan bir nesne ilişkisel eşleme (ORM) aracıdır. DbContext sınıfı, Entity Framework'ün temel yapısıdır ve veritabanı bağlantısı ayarlarını yapmak için kullanılır. Veritabanı bağlantısı yapılandırması yapmak, bir veritabanı sunucusuna erişmek için gerekli olan ayrıntıları belirtmek anlamına gelir.
Migration işlemleri, var olan bir veritabanına yeni özellikler veya değişiklikler eklemek için kullanılır. Bu işlem, veritabanının şema güncellemesini otomatikleştirir ve böylece veritabanı modeliyle senkronize bir şekilde veritabanı şemasını güncelleştirir.
CRUD işlemleri, veritabanı işlemlerinin temelini oluşturur. 'Create, Read, Update, Delete' (Oluştur, Oku, Güncelleştir, Sil) işlemleri olarak da bilinirler. Bu işlemler, veritabanındaki verileri oluşturmak, okumak, güncellemek veya silmek için kullanılır. ASP.NET Core MVC, CRUD işlemlerini gerçekleştirmek için Entity Framework veya ADO.NET kullanabilir.
Dependency Injection, bir tasarım kalıbıdır ve bağımlılıkların yönetilmesine yardımcı olur. Bu kalıp, bileşenlerin, hizmetlerin veya diğer nesnelerin kendilerine ihtiyaç duydukları diğer nesneleri otomatik olarak almasına olanak tanır. Service ve Repository katmanları, Dependency Injection ile birlikte kullanılan iki ana katmandır ve veritabanına erişmek için kullanılır. Bu katmanlar, verileri işlemek ve sunmak için kullanılan hizmetleri ve veritabanına erişmek için kullanılan Repository sınıflarını içerir.
Dependency Injection ile veritabanı bağlantısı yapmak oldukça basittir. Veritabanı bağlantısı, ConfigureServices yöntemi aracılığıyla Dependency Injection'da yapılandırılabilir. Bu yöntem, uygulamanın hizmetleri ve yapılandırmaları için kullanılan bir ayar yöntemidir. Bu sınıfta, DbContext sınıfı belirtilir ve veritabanı bağlantısının yapılandırması yapılır.
MVC Modeli
MVC modeli, Model-View-Controller (Model-Görünüm-Kontrolcü) kısaltmasıdır. Bu model, bir uygulamanın kodunu daha sade ve okunaklı hale getirmek için kullanılan bir mimaridir.
Model, uygulamanın verilerinden sorumludur ve veritabanı işlemlerini gerçekleştirir. View, kullanıcıya sunulan arayüzü belirler. Controller, kullanıcının arayüzle etkileşime girdiği yerdir ve Model ile View arasındaki bağı koordine eder.
ASP.NET Core MVC, Model-View-Controller mimarisine dayanır ve uygulama kodunu daha okunaklı hale getirmek için bu modeli kullanır. Bu sayede geliştiriciler uygulama geliştirirken daha az zaman harcarlar ve aynı zamanda daha güvenilir, ölçeklenebilir ve yönetilebilir uygulama geliştirebilirler.
Bir örnek vermek gerekirse, bir web uygulaması düşünelim. Bu uygulamanın kullanıcı kayıt olma, giriş yapma ve bir şeylere yorum yapma gibi birçok işlemi vardır. Bu işlemler ayrı ayrı metodlar halinde yazılmaz, bunun yerine Model, View ve Controller klasörleri oluşturulur. Model klasöründe verilerin kontrolü ve saklanması için özel sınıflar oluşturulur. View klasöründe HTML dosyaları hazırlanır ve Controller klasöründe ise Model ve View arasındaki etkileşim gerçekleştirilir. Bu sayede işlemler daha düzenli ve anlaşılır hale gelir.
Entity Framework
Entity Framework, Microsoft tarafından geliştirilen .NET Framework'te kullanılan bir ORM (Object-Relational Mapping) aracıdır. Bu araç sayesinde, .NET uygulamaları için veritabanı işlemleri kolay ve hızlı bir şekilde gerçekleştirilebilir. Entity Framework, veritabanı işlemleri için SQL kodu yazılmadan, nesne tabanlı bir yapıda çalışmaktadır.
Bu framework ile birlikte, basit ve karmaşık veritabanı işlemleri yapmak mümkündür. Entity Framework, veritabanı tabloları ile ilgili işlemleri otomatik olarak yapabilen bir çözümdür. Bununla birlikte, LINQ (Language Integrated Query) kullanılarak, sorgulama işlemleri de kolay bir şekilde yapılabilmektedir.
Entity Framework, temel olarak iki farklı yaklaşım sunar. Bunlar; Database First ve Code First yaklaşımlarıdır. Database First yaklaşımında, öncelikle var olan bir veritabanı tasarımından yola çıkarak, bu tasarım üzerinde işlemler yapılır. Code First yaklaşımında ise, öncelikle uygulamanın sınıf tasarımı oluşturulur ve bunun üzerinden veritabanı tasarımı oluşturulur.
Entity Framework kullanarak, ORM yapısını kullanarak veri tabanı işlemlerinizi yapabilirsiniz. ORM, veri tabanı işlemleri için gerekli olan SQL kodlarını yazmak yerine objelerinizi veri tabanına eklemenizi sağlar. Bu da, veritabanı işlemlerinin daha hızlı ve kolay bir şekilde yapılmasını mümkün kılar. Entity Framework kullanarak, veritabanı işlemlerinde standart bir yapı oluşturabilirsiniz.
DbContext Sınıfı
Entity Framework ile çalışırken DbContext sınıfı oldukça önemlidir. Bu sınıf, veritabanı bağlantısını ve diğer Entity Framework bileşenlerini yönetir.
DbContext sınıfı, model sınıfları ve veritabanı arasındaki bağlantıyı sağlar. Bu sınıfın birçok özelliği ve yöntemi vardır, ancak en önemlisi veritabanı nesneleriyle ilişki kurma yeteneğidir.
Bir DbContext sınıfı tanımlayarak, veritabanıyla çalışmak için gereken tüm özelliklere ve yöntemlere sahip olabilirsiniz. Bunlar arasında DbSet nesnelerini belirtmek, veri sorgulamak ve veritabanına kaydetmek yer alır.
DbContext sınıfı oluşturmak için, DbContext sınıfını miras alan bir sınıf tanımlamanız gerekmektedir. Bu sınıf içinde, DbSet özelliği belirterek veri tabanındaki tablolara karşılık gelen model sınıflarına erişebilirsiniz.
DbContext Sınıfı | Açıklama |
---|---|
Database | Veritabanı bağlantısı hakkında bilgi sağlar. |
dbSet | Model sınıfları için DbSet nesnelerini belirtir. |
OnModelCreating | Model sınıfları için ilişki kurulumunu yapılandırır. |
DbContext sınıfı, Entity Framework ile çalışırken veritabanı bağlantısını yönetmek için önemli bir bileşendir. Bu sınıfı kullanarak, veritabanına veri ekleme, çıkarma, güncelleme ve sorgulama yapabilirsiniz.
Veritabanı Bağlantısı Yapılandırması
ASP.NET Core MVC ile veritabanına bağlanmak için ilk önce Visual Studio'da bir proje açmalısınız. Projeniz oluşturulduktan sonra NuGet paket yöneticisinden Entity Framework Core paketlerini yüklemeniz gerekiyor. Daha sonra appsettings.json
dosyasında veritabanı bağlantısı yapılandırmasını yapmanız gerekiyor.
Bağlantı dizesi oluştururken veritabanı türünü, sunucu adını, bağlantı noktasını ve gerekli diğer ayarları belirlemeniz gerekiyor. Bu dosyada birden fazla bağlantı dizesi belirleyebilirsiniz, böylece farklı ortamlara uygun düzenlemeler yapabilirsiniz. Örneğin:
{ "ConnectionStrings": { "Development": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true", "Production": "Server=MyServer;Database=MyDatabase;User Id=MyUsername;Password=MyPassword;" }, "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*"}
Bu örnekte, hem geliştirme hem de üretim bağlantı dizeleri belirtiliyor. Çalışma ortamına göre, ilgili bağlantı dizesi kullanılacaktır. Bu yapılandırma dosyası, gerekli olmayan bilgilerin açıkça görüldüğü için şeffaf bir bağlantı dizesi yönetimi sağlar.
ConnectionStrings bölümündeki ad, DbContext sınıfındaki constructor parametresi olarak kullanılacak olan addır.
Migration İşlemleri
Migration işlemleri, ASP.NET Core MVC uygulamalarının veritabanlarına sağlıklı bir şekilde bağlanabilmesi için gereklidir. Migration işlemleri sayesinde veritabanı tabloları oluşturulabilir, güncellenebilir veya silinebilir. Bu işlemler veri tabanı modelinde yapılan değişikliklerle uyumlu hale getirilmelidir.
Migration işlemleri yapmak için, öncelikle projedeki DbContext sınıfı ile veritabanı modeline göre bir migration oluşturulmalıdır. Bu migration, veritabanında yapılacak değişiklikleri belirler. Migration oluşturmak için, Package Manager Console kullanılabilir. Aşağıdaki kod bloğu, migration oluşturmak için kullanılacak komut satırı kodlarını içerir:
dotnet ef migrations add <migration-name>
Oluşturulan migration ile veritabanında yapılacak değişiklikler belirlendikten sonra, veritabanına bu değişiklikler uygulanır. Bu işlem için aşağıdaki komut satırı kodu kullanılabilir:
dotnet ef database update
Bu komut satırı kodu, migrationların yürütülmesini sağlar. Veritabanındaki tablolar da dahil olmak üzere tüm değişiklikler, bu komut satırı kodu aracılığıyla uygulanır.
Ayrıca, migration işlemleri sırasında hata durumlarında geri alma işlemi de yapılabilir. Geri alma işlemi için aşağıdaki komut satırı kodları kullanılabilir:
dotnet ef database update <target-migration>
Bu komut satırı kodu, hedeflenen migration'a kadar geri alma işlemi yapar. Daha sonraki migration işlemleri ise bir önceki migration'a göre yapılır. Bu işlem, veritabanında yapılan değişikliklerin geri alınmasını sağlar ve hataları düzeltilebilir.
CRUD İşlemleri
CRUD işlemleri, Create-Read-Update-Delete (Oluşturma-Okuma-Güncelleme-Silme) işlemlerinin kısaltmasıdır. Bu işlemler, veritabanı işlemlerinde sıkça kullanılan temel işlemlerdir. ASP.NET Core MVC'de CRUD işlemleri yapmak oldukça basittir.
İlk olarak bir veritabanı modeli oluşturulmalıdır. Bu modeli oluşturmak için bir class oluşturulur ve class'ın özellikleri veritabanı tablosunun sütunlarına karşılık gelir. Örneğin, bir "Students" class'ı oluşturulduğunda class'ın özellikleri "Id", "Name", "Surname", "Age" ve "Department" olabilir.
Bir sonraki adım, veritabanı context class'ı oluşturmaktır. Bu class, veritabanına erişim sağlar ve CRUD işlemlerinin yapılabilmesi için gereklidir. DbContext class'ı oluşturulduktan sonra, veritabanı bağlantısı yapılandırılmalıdır.
CRUD işlemleri için bir controller class'ı oluşturulmalıdır. Bu class, veritabanı modeline erişim sağlamak için DbContext class'ını kullanır. CRUD işlemleri için genellikle 4 action method kullanılır:
- Create: Veritabanına yeni bir kayıt eklemeye yarayan methoddur.
- Read: Veritabanından bir veya daha fazla kayıt okumaya yarayan methoddur.
- Update: Veritabanında bir kaydı güncellemeye yarayan methoddur.
- Delete: Veritabanından bir kaydı silmeye yarayan methoddur.
Bu methodlar, HttpGet ve HttpPost attributeleriyle belirtilmelidir. HttpGet attributesi, methodun sayfa yüklendiğinde çalışmasını sağlar. HttpPost attributesi ise sayfada bir form gönderildiğinde çalışmasını sağlar.
CRUD işlemlerinin gerçekleştirileceği sayfalar da oluşturulmalıdır. Bu sayfaların tasarımları, HTML ve Razor syntax kullanılarak hazırlanabilir. Özellikle form tasarımı, asıl işlemlerin gerçekleştirileceği yer olduğu için iyi düşünülmelidir.
CRUD işlemlerinin tamamlandığından emin olmak için, uygun hata kontrolleri ve güvenlik kontrolleri de yapılmalıdır. Üçüncü taraf güvenlik araçları da kullanılabilir.
Dependency Injection
Dependency Injection; yazılım geliştirme süreçlerinde oldukça popüler hale gelen bir programlama tasarımıdır. Temel olarak, bir sınıfın diğer sınıflara bağımlılıklarının azaltılması ya da tamamen ortadan kaldırılması için kullanılan bir yapıdır. Bu sayede kodların daha esnek, daha okunaklı ve daha kolay test edilebilir hale gelmesi sağlanır.
Dependency Injection, genellikle "constructor injection" ve "property injection" olarak adlandırılan iki ana yöntem ile çalışır. Constructor injection, sınıfların yapıcı metotları aracılığıyla enjekte edilirken, property injection ise sınıfın özelliklerine değerlerin atanmasıdır. Her iki yöntem de, bir sınıfın ihtiyaç duyduğu diğer sınıfların bağımlılıklarının azaltılmasını sağlar.
Bir ASP.NET Core MVC uygulamasında Dependency Injection kullanarak veritabanı bağlantısı oluşturmak oldukça kolaydır. Service ve Repository katmanlarının kullanıldığı bir yapıya sahip olan ASP.NET Core MVC'de, veritabanı bağlantısı da bu katmanlarda oluşturulur ve bu katmanlara yapılan enjeksiyon sayesinde diğer sınıflar üstünde etkisini gösterir. Dependency Injection, kodların okunaklılığını ve yeniden kullanılabilirliğini artırırken, aynı zamanda gelecekteki değişiklikleri de kolaylaştırır.
Service katmanı, uygulamanın iş mantığını yürüten kodları barındırırken, Repository katmanı ise veritabanı işlemlerinin yer aldığı katmandır. Service katmanı, CRUD işlemlerinde kullanılırken, Repository katmanı, veritabanı bağlantısının oluşturulduğu yer olarak kullanılır. Bu katmanlar Dependency Injection sayesinde daha popüler hale gelmiştir ve kod kalitesini artırmıştır. Veritabanı işlemlerinin bu katmanlarda yapılması, kodun daha okunaklı hale gelmesini sağlar ve veritabanı operasyonlarının derli toplu bir şekilde ele alınmasına olanak verir.
ASP.NET Core MVC'de Dependency Injection kullanarak veritabanı bağlantısı oluşturmak oldukça kolaydır. İlk olarak, Startup sınıfında ConfigureServices adlı bir metot oluşturulur ve bu metotta veritabanı bağlantısı oluşturulur. Daha sonra, oluşturulan bağlantının ilgili interface üzerinden servislere bağımlılığı enjekte edilir. Bu sayede, uygulamada herhangi bir yerde bu bağlantıya kolayca erişilebilecektir.
public interface IDbContextFactory where TContext : DbContext TContext CreateDbContext(string[] args);
Yukarıda verilen interface, DbContext sınıfından türetilen bir sınıf oluşturma işlemini sağlar. Bu sayede, uygulama için istenilen veritabanı bağlantısı yapısının oluşturulması kolaylaşır. Dependency injection, ASP.NET Core MVC uygulamasında veritabanı bağlantısı oluşturma işlemini oldukça basitleştirirken, aynı zamanda kod okunaklığı ve yeniden kullanılabilirlik açısından da birçok avantaj sağlar.
Service ve Repository Katmanları
Service ve repository katmanları, ASP.NET Core MVC uygulamalarında veritabanı işlemlerinin yapılmasını sağlayan yapıları ifade etmektedir. Service katmanı, iş mantığını ve veri işlemlerini bir arada barındıran bir yapıdır. Repository katmanı ise veritabanına erişimi sağlayan bir yapıdır.
Service katmanı ile iş mantığını tek bir yerde yönetmek mümkündür. Veri işlemleri repository katmanında gerçekleştirilir ve servis katmanı veriye ulaşarak işlemlerini gerçekleştirir. Bu sayede kod tekrarı önlenir ve projeler daha düzenli hale gelir.
Repository katmanı, veri işlemlerinin gerçekleştirildiği katmandır. Veritabanı sorguları burada yazılır ve bu katmanda herhangi bir veri çıkarma, ekleme, silme gibi işlemler gerçekleştirilir.
Service ve repository katmanları kullanmanın en büyük avantajı kod tekrarını önlemektir. Bu sayede projeler daha düzenli hale gelir ve veri işlemleri daha kolay takip edilebilir hale gelir. Ayrıca, MVC modelinde de veri işlemlerinin tek bir yerde yönetilmesi, proje geliştirme sürecini hızlandırmaktadır.
Tablo kullanarak daha detaylı bir şekilde açıklamak gerekirse, Service katmanında genellikle şu fonksiyonlar kullanılır:
- DataAccess : Verilerin repository katmanından elde edilmesini sağlar.
- BusinessLogic : Verilerin işlenmesini sağlar ve iş kurallarının belirlenmesinde kullanılır.
- Validation : Verilerin doğru bir şekilde girilmesini, işlenmesini ve uygulama tarafında ferdi özellikleri sağlamak için bir araçtır.
Repository katmanında ise, Entity Framework kullanılarak veritabanı işlemleri yapılır. Bu işlemler şu şekilde sıralanabilir:
- Create : Yeni bir veri oluşturma işlemi
- Retrieve : Verilerin çekilmesi
- Update : Var olan bir verinin güncellenmesi işlemi
- Delete : Belirtilen bir verinin silinmesi işlemi
Service ve repository katmanlarının kullanımı, ciddi bir şekilde veritabanı işlemlerini kolaylaştırmaktadır ve kod tekrarını önleyerek projelerin daha düzenli hale gelmesine büyük katkıda bulunmaktadır.
Dependency Injection İle Bağlantı
Bağlantı oluşturmak için Dependency Injection yöntemi kullanabilirsiniz. Bu yöntem, Open/Closed prensibine uygun olarak, yeni bir ORM aracıyla uyumlu bir veri modeli eklendiğinde, sıfır kod değişikliğiyle onu kullanmanızı sağlar.
İlk adım, Startup.cs dosyasındaki ConfigureServices metodu içinde, DbContext'i Dependency Injection olarak kaydetmektir. Ardından, DbContext'in nasıl kullanılacağını Injektör'e bildirirsiniz.
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddDbContext
Bu adımları tamamladıktan sonra, yapmanız gereken, Controller'ınızı DbContext'e bağlamaktır. Bu, DataContext nesnesini Controller'ın Constructor'undan alarak yapılır.
public class HomeController : Controller { private readonly MyDbContext _context;
public HomeController(MyDbContext context) { _context = context; }
public async Task
Bu örnek, HomeController'in constructor'ında MyDbContex'ı inject eder ve Home/Index metodunda verileri MyDbContex içerisindeki Test tablosundan çeker.
Bu şekilde, ASP.NET Core MVC'de Dependency Injection kullanarak veritabanı bağlantısı gerçekleştirebilirsiniz.