Ana içeriğe atla
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.
- 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
Yorum Gönder