asp.net core basit crud uygulaması - veri tabanı sınıfını oluşturmak /// 3

  • Veri tabanı ile etkileşim kurabilmek için projede bir veri tabanı sınıfı olması gerekmektedir.
    • Bu sınıfa; Context sınıfı veya DbContext sınıfı da denilebilir.
  • Bir veri tabanı sınıfı en basit MVC uygulamasında; Models klasörü içerisinde veya Models klasörü içerisindeki Context klasörü içerisinde bulunabilir.
  • İsimlendirme olarak da veritabanının ismini alması gerekmektedir. 
    • Mesela içerisinde bir sürü Model/Entity bulunan bir E Ticaret uygulaması için uygun isimlendirme; "ECommerceDbContext" olurken, bu proje özelinde sadece tek bir Entity üzerind iş yapıldığında; "ProductDbContext" isimlendirmesi kullanılabilir. 
  • Bir sınıfın veri tabanı sınıfına karşılık gelebilmesi için DbContext sınıfından kalıtım alması gerekmektedir.
    • DbContext sınıfı EntityFrameworkCore ile gelir.
    • DbContext'den kalıtım alarak oluşan sınıf aslında veri tabanına karşılık gelmektedir.
  • Models Context ProductDbContext.cs


  • Sınıfın içerisine ilk olarak;
    • ProductDbContext isimli bir Constructor oluşturulur.
    • Bu Constructor iki parametre alır;
      • DbContextOptions<TContext>; 

        • Bu parametre, veritabanı bağlantısı veya hangi veritabanı yapılandırmasının kullanılacağı gibi bilgileri içerir. 

        • TContext olan kısım işlem yapılan sınıfa göre değişkenlik gösterir. Bu örnek üzerinde "ProductDbContext" tanımı verilmiştir.

      • options

        • Bağlantı dizesi, veritabanı sağlayıcısı, günlükleme gibi DbContext için yapılandırma bilgilerini tutar.

  • base(options) ile de  "ProductDbContext" sınıfının base class'ı yani kalıtım aldığı sınıf olan DbContext sınıfının Constructor'ını çağrılır.

  • Bu sayede, "ProductDbContext" sınıfı içinde veritabanı bağlantısı veya yapılandırma gibi özellikleri kullanabilecektir.


  • Bir Model'in ilgili veri tabanı bağlantı sınıfının tablosu olduğunu belirtmek için DbSet Property'si oluşturmak gerekir.
  • Daha önce oluşturulan Product modeli bu sayede bu sınıfın içerisine eklenir.
  • İkinci kez yazımında çoğul şekilde yazılması Tablo isimlendirmesi için yapılır. 
    • Bir Model tekil isim alabilirken, bir Tablo içerisinde birden fazla veriyi barındırdığı için çoğul isimlendirme alabilir.

  • Best Practices açısından kodun içerisine username, password, connection string vs. gibi statik tanımlamalar yapılmamalıdır.
  • Veritabanı bilgilerinin bu sebeple projenin konfigürasyon bölümüne eklenmesi gerekmektedir. (appsettings.json)
  • Bir object tanımı yapılması gerekir. ConnectionStrings key'i karşılık olarak bir object alır.
  • Bu objectde de key olarak bağımsız bir isimlendirme verilir. (DefaultConnection)
    • Bu isimlendirme Program.cs'de veya başka bir yerde bu ayarı bulmak için kullanılacaktır.
  • DefaultConnection'un value değeri olarak üç ana tanımlama gerekir. 

    • İlgili durumda bu sayı artabilir. (user,password,encrypt vs.)

  • Server = Veri tabanının bağlantı ismidir. Mesela SQL Server Management kullanılırken çıkan ekranda bağlanılacak serverlerin isimleri gözükür. İşte o bağlanılan Server ismi, dosyada Server'in karşılığı olarak yazılır.
  • Database = Veri tabanının ismi belirlenir.
  • Trusted_Connection = Güvenli bağlantı ayarı içindir.

  • NOT : Eğer hata alınırsa dördüncü olarak Encrypt=False; da eklenebilir. 

  • Veri tabanı bağlantı sınıfını Program.cs'ye eklemek gerekmektedir. 
  • Bir servis olarak ekleneceği için aşağıda belirtilen koddan önce eklenmelidir.


  • Öncelikle appsettings.json üzerinde tanımlanan bağlantı ayarı isim olarak çağırılır ve bir değişkene atılır.(DefaultConnection)
  • Ardından da bu değişken ile bir servis eklemesi yapılır.

  • Servis eklemesi yapılırken hem veri tabanı sınıfı ismi, hem de konfigurasyon için tanımlanan değişken ismi kullanılır.

  • UseSqlServer metotu ile SQL tabanlı bir veri tabanı kullanımına işaret edilir. 
    • Başka bir veri tabanı tipinde kullanım olduğu zaman bu değiştirilebilir. 


Yorumlar