ADO.NET Entity İle Veritabanını Sınıflar İle Oluşturuyoruz

Ado.Net Entity, Microsoft’ un Orm aracıdır. Bu araçlar, veritabanı işlemlerini nesneler üzerinden yapmamıza olanak sağlayan yapılardır. Veritabanında bulunan her tabloya karşılık gelen bir nesne bulunmaktadır.

ADO.NET Entity ile veritabanını sınıflar ile oluşturuyoruz

Bu makalemizde basit bir blog veritabanı entity sınıfı oluşturacağız.

Veritabanımızdaki tablolara karşılık olarak class(sınıf)’lar oluşturuyoruz kullanici adından tablomuzun class’ını oluşturalım.

  • Kullanici adı veritabanındaki tablomuzun adını temsil eder.
    • Id, Ad, Posta, Site… Kullanici tablosundaki alanlarımızı temsil eder.
      • int, string, datetime… Alan türlerini ifade etmektedir.
  • Veritabanı otomatik olarak oluşturulacağında Id alanı otomatik olarak birincil anahtar ve otomatik artarn sayi şeklinde olacaktır farklı bir alanı birincil anahtar yapmak için [Key] Attribute’ünü kullanmalısınız.

DbContext

  • Oluşturduğumuz modelin anlam kazanması için bir bağlam (context) oluşturmamız gerekiyor. Bu context bizim modelimizi kullanıp veritabanı işlemlerimizi yapmamıza olanak sağlıyor.
  • BlogDB hem DbContext’imizin adı hemde web.config dosyasında tanımlı olan bağlantı cümlemizin(connection string) adı olmaktadır.
  • DbSet kullanacağımız model sınıfımızı belirtiyoruz.
  • Kullanici buda veritabanı işlemleri için kullanacağımız methodları içinde barındıran sınıfımızın adını ifade ediyor. Aynı zamanda veritabanı otomatik oluşturulduğunda tablo adınıda ifade ediyor.

web.config dosyasında DbContext’imizle aynı adda olması gereken connection string’imizi tanımlıyoruz ben Sql Server kullandığım için Sql Server için olan connection string’i yer almaktadır alttaki kodda ama farklı veritabanı kullanıyorsanız o veritabanına özel connection string’e www.connectionstrings.com sayfasından ulaşabilirsiniz.

Ekle, Listele, Düzenle ve Sİl (CRUD)

Üstteki kodlarda görüldüğü üzere hiç sql cümlesi olmadan Linq kodlarıyla kayıt ekledik, listesini aldık, güncelledik ve sildik bu işlemlerin hepsini class’larla yaptık ama arkaplanda Sql Profiler’dan görebileceğiniz gibi sql kodu üretip işlem yapmaktadır.

Doğrulama (Validation)

Veriler eklenirken yada düzenlenirken bazı kurallar çerçevisinde bu işlemler gerçekleştirilir. Bazı alanlar boş olamaz, sadece sayı olabilir yada girilen değer 5 haneli olabilir gibi.. işlemlere doğrulama (validation) diyoruz. Doğrulama işlemlerini modelimizin içindeki ilgili alanlara açıklamalar (Annotations) ekleyerek gerçekleştirebiliyoruz. Temel annotations lar System.ComponentModel.DataAnnotations sınıfı içerisinde bulunuyor.

Üstteki DataAnnotionsları kullanabilmek için alttaki namaspace’leri eklemelisiniz

Üstteki Kodda kullanılan DataAnnotations’lar
  • [Table(‘KULLANICI’)] – Veritabanında oluşacak olan tablo adını belirtiyoruz.
  • [Key] – Veritabanında oluşacak alanın primarykey ve otomatik artan sayı olmasını sağlamaktadır.
  • [Required] – Veritabanında oluşacak alanın not null olarak ayarlanması sağlar yani boş geçilemez.
  • [MinLength] – En az 6 karakter değer girilebileceğini belirtiyoruz.

Eposta adresi doğrulama gibi özel bir durum için ise kendi kişisel doğrulamamızı yazıp kullanabiliyoruz.

İlişkiler (Relationship)

Veritabanı tasarımındaki en önemli noktayı hiç şüphesiz tablolar arasında ki ilişkiler oluşturuyor. Veri bütünlüğü için hayati önem taşıyan bu noktada modellerimiz içine basit bir şekilde ilişkilerimizi tanımlayabiliyoruz.

1 den Çoğa (1 to n) İlişki

Senaryomuz şu şekilde; bir kullanıcının birden fazla yazısı olabilir. Bu ilişkiyi gerçekleştirmek için yazi adında yeni bir model oluşturup kullanici modeliyle ilişkilendiriyoruz.

Yukarıda ki modellerimize baktığımızda yazi içerisinde kullanici ve kullaniciId yi belirtip, bir yazının bir kullanıcıya ait olduğunu belirtiyoruz. Kullanici tarafında ise ICollection yazilar tanımını yapıp, bir kullanıcının birden fazla yazısı olacağını ifade ediyoruz. Oluşan ilişki aşağıda ki gibi olacaktır.

Çoktan Çoğa (n to n) İlişki

Bu seferki senaryomuz, birden çok yazının birden çok kategoriye ait olması. Bu durumu gerçekleştirmek için yukarıdaki modellerimizin yanına birde kategori adında bir model ekliyor ve gerekli değişiklikleri yapıyoruz.

Kategori modelinin içine, birden fazla yazı olabileceği için bir tanımlama yapıyoruz, aynı tanımın tersini yazı modeli içinde yapıyoruz. Bu durum sonucunda oluşan tablo yapısı aşağıdaki gibi oluyor.

SqlQuery, ExecuteSqlCommand

result8 de kendi sql sorgumuzu direk yazıp kullanabiliyoruz, burada dikkat edilecek husus veritabanından dönen alanların türleri ve isimleri yüklenecek sınıftakilerle birebir aynı olmalıdır. Bu yöntemi veritabanında ki bir view dan kayıtları çekmek için kullanabiliriz.
Direk sql komutu çalıştırmak için ExeCuteSqlCommand özelliğini kullanabiliyoruz. Bu özellik bazı durumlarda hayati önem taşıyabiliyor.

Veritabanında Değişiklik Yapma

Veritabanınıza daha sonrada alan eklediğinizde, değiştirmek istediğinizde değişikliği class’larda yapınız eğer classlarda değişiklik veya ekleme yaptıysanız Visual Studio'dan Tools > Nuget Package Manager > Package Manager Console dedikten sonra açılan consol penceresinde PM> yazısını gördüğünüzde kod yazmaya başlayabiliriz anlamına gelmektedir. Değişiklikleri kaydetmek için Add-Migration yazın enter’a basın daha sonra değişikliği kayıt altına alacağı için herhangi bir isim girip enter’a basın(Eğer kırmızı renkli içerisinde Enable-Migrations gibi bir ifade çıkarsa öncelikle migrations’ları aktif etmelisiniz aktif etmek için konsol ekranına Enable-Migrations yazıp entera basın ardından tekrar Add-Migration yazın entera basın) ardından Update-Database yazarak değişikliklerin veritabanınada uygulanmasını sağlayabilirsiniz.