Entity Framework 2008 yılından itibaren Microsoft tarafında geliştirilen ORM aracıdır. Peki ORM nedir? ORM veya Object to Relational Mapping temel olarak veritabanında yer alan tablo ve alanları nesne olarak kullanmamıza imkan veren bir yazılım mimarisidir. Böylece yazılım geliştirici veritabanı ve SQL komutlarına ihtiyaç duymadan yazılım geliştirebilir.
.NET veya herhangi bir programlama dili ile veritabanı uygulamaları yaparken ilk olarak veritabanı bağlantısı yapılır. Daha sonra SQL komutları ile veritabanındaki veriler alınır. Alınan veriler programlama diline uygun veri yapılarında saklanarak işlem yapılır. Verilerin programlama diline uygun veri yapılarına dönüştürülmesi sırasında beklenmedik hatalar, sorunlar oluşabilir. Ayrıca karmaşık veritabanı sorguları geliştirmeyi daha da zor hale getirir. ORM araçlarının temel kullanım nedeni bu ve bunun gibi sorunları ortadan kaldırmaktır.
Entity Framework gibi ORM araçları farklı veri sağlayıcıları (SQL Server,MySQL,SQLite gibi) için aynı komutları kullanarak işlem yapmaya imkan verir.
Entity Framework’ü kullanmanın avantajları;
-CRUD (Create,Read,Update,Delete) işlemleri ile uzun ve karışık SQL kodlarından kurtulmamızı sağlar.
-Veritabanına bağımlılığı ortadan kaldırır.
-Veritabanı işlemlerinde nesneye yönelik kod yazmamızı sağlar.
-Daha sade SQL sorguları sayesinde veritabanı performansını artırır.
-Kod yazma süresini kısaltarak daha az zamanda daha çok iş yapmayı sağlar.
Entity Framework ORM aracı bir Nuget paketi olduğundan Visual Studio geliştirme ortamında projeye sağ tıklayıp Manage Nuget Packages seçeneği ile kurulum yapılabilir. Buradan Microsoft.EntityFrameworkCore seçip çalışmak istediğiniz version ile indirebilirsiniz. Core değil de sadece Entiy Framework ile çalışmak istiyorum derseniz ya packages kısmından ya da Package Manager Console kısmından indirebilirsiniz. Console kısmı için “Install-Package EntityFramework” komutu ile indirebilirsiniz. Bu yazımda göstereceğim örnek Core ile olacaktır.
Entity Framework ile 3 farklı yöntem ile proje geliştirilebilir. Bu yöntemler;
-Model First
-Database First
-Code First
Bu yazımızda websitemiz için de oluşturduğumuz Code First yöntemini inceleyeceğiz.
Code First (Kod yazarak): Bu yöntem classlarımızı visual studio ortamında oluşturmaya başlayarak gerçekleştirdiğimiz bir yöntemdir.Veritabanımız bu classlardan türetilmektedir. Burada Mapping işlemleri yazılımcı tarafından classlar oluşturulurken Attribute’lar sayesinde yapılabilmektedir.Bu arada Mapping işlemi kısaca tablolarımızdaki kısıtlarımızı belirlediğimiz olaydır.
Code First (Var olan veritabanını kullanma): Bu yöntemde de classlar ve mapping kodları yazılımcı tarafından oluşturulmaktadır. Veritabanımız classlarımızın ve modellemenin durumuna göre güncellenmektedir.
Code First yapısında programlama dilindeki “class” yapıları veritabanındaki “tablo” yapılarına, “property” yapıları ise veritabanındaki “kolon” yapılarına denk gelmektedir. Ayrıca Attribute’lar sayesinde veritabanı yapılarına Validationlar uygulanabilmekte ve kolonlara belirli şartlar veya kısıtlamalar koyulabilmektedir.
Migration yapıları sayesinde yaptığımız yenilikleri Visual Studio üzerinden hızlıca fiziksel veritabanına yansıtabileceğiz.Kod kısmında yaptığımız değişiklikleri veritabanına yansıtmaya Migration demekteyiz.
Örnek üzerinden konuyu anlatacak olursak öncelikle yeni bir .NET Core web projesi oluşturuyoruz.Versiyonu ise çalışmak istediğiniz versiyonu seçebilirsiniz. Biz örneğimizde 3.1 kullanacağız.
Oluşturduğumuz proje için Manage Nuget Packages üzerinden Microsoft.EntityFrameworkCore paketini indiriyoruz.
Şimdi Code First ile bir veritabanı oluşturmayı ve bu veritabanı içerisinde bir tablo eklemeyi görelim. Öncelikle örnek bir tablomu oluşturuyorum.
Tablomuzu temsil eden sınıfımızı oluşturduk. Şimdi veritabanı ile bağlantı kuracağımız context sınıfını oluşturalım.
Context sınıfını incelerseniz eğer DbContext sınıfından türemektedir. Bunun Sebebi, Entity Framework mimarisinin nimetlerine bu sınıfın mirasından erişebilecek, ayrıca ilgili sınıfın bir context sınıfı olmasını sağlayacaktır. “OrnekDbContext” sınıfına verdiğimiz isim bizim için oldukça önemlidir.
Code First yapısında en temel nokta, veritabanındaki tabloları temsil edecek Generic yapıdaki DbSet tipinden propertyler olarak tutmasıdır. Yukarıda gördüğünüz “Ogrencis” isimli property, bizim “Ogrenci” isimli tablomuzun, veritabanındaki fiziksel yansımasını oluşturacaktır.
Code First yapısında bir veritabanı dizayn ettik ve sıra bu veritabanını oluşturmaya geldi.Oluşturduğumuz bu yapı, hangi Server’da hangi isimde veritabanı oluşturacağını bilmiyor. “appsettings.json” dosyasının içine gerekli tanımlamamızı yapacağız.
Startup.cs dosyası üzerinde oluşturduğumuz context sınıfını ve connectionString için oluşturmuş olduğumuz DefaultConnection verisini belirtiyoruz. Burada belirtilen satırda UseSqlServer tanımlaması için EntityFrameworkCore.SqlServer paketini yüklememiz gerekecektir.
Bu işlemleri yaptıktan sonra Package Manager Console üzerinden “Add-Migration MigrationAdı” komutu ile migration eklenmelidir.
Gördüğünüz gibi eklenen migration hazır bir şekilde geldi. Şimdi veritabanını güncelleyelim. Güncellemeyle birlikte database aktif bir şekilde görünecektir.
Bu yaptığımız işlemler sonucunda Entity Framework Code First ile veritabanımızı oluşturmuş olduk.
Writer
Hazel Tokluoğlu
Yazılım Geliştirme Mühendisi