Entity Framework Nedir? Ne Amaçla Kullanılmaktadır? Avantajları Nelerdir?
Microsoft firması tarafından 2008 yılında geliştirilmeye başlanan Entity Framework bir ORM aracıdır. ORM ile yazılımcılar, veritabınına ihtiyaç duymadan yazılım geliştirebilirler. ORM (Object Relational Mapping) veritabanında ki tablo ve alanları nesne olarak kullanmaza imkan sağlayan bir yazılım mimarisidir.
ORM araçları ile veritabanı kullanımına ihtiyaç duyulmayacağı için, veritabanlarında yaşanabilecek sorunları ve zaman kaybını ortan kaldırmış olacağız. Örneğin; veritabanı ve geliştirilen yazılım arasındaki yaşanan bağlantı sorunları, veri ekleme, düzenleme, ya da silme gibi temel işlemlerde aniden karşılaşılan beklenmedik hatalar ve benzeri sorunlar ORM aracı ile ortadan kalkıyor. Entity Framework gibi ORM araçları SQL Server, MySQL, SQLite gibi veritabanları ile aynı komutları kullanarak işlem yapmamızı da sağlamaktadır.
Entity Framework ORM aracını projeye eklemek için Visual Studio’da projeye sağ tıklayıp Manage NuGet Packages seçeneği ile kurulum yapabiliriz ya da Package Manager Console alanına, “Install-Package EntityFramework
” komutunu yazarak da kurulumu gerçekleştirebiliriz.
C Sharp Entity Framework ve LINQ Kavramları
Database First, Model First ve Code First Kavramları
Entity Framework ile model oluşturmak için Database First, Model First ve Code First yaklaşımları kullanılmaktadır.
Database First
Önceden hazırlanan veritabanı tablolarına uygun nesneler Visual Studio veya komut satırı ile otomatik olarak oluşturulmaktadır.
Bunun için Visual Studio IDE ile projeye ADO.NET Entity Data Model ve EF Designer from database seçeneğini seçerek, veritabanı bağlantısını gerçekleştirdikten sonra işlem yapılacak tabloların oluşturulması gerekmektedir. Yaptığımız bu işlemlerin sonunda veritabanına ait uygun sınıf oluşturulacaktır.
Model First
Database First yapısı gibi, ADO.NET Entity Data Model ve EF Designer from model seçeneği ile oluşturulmaktadır. Oluşturduğumuz bu modele, görsel olarak tablolar, tablo alanları ekleyerek de model oluşturulmaktadır.
Code First
Database First ve Model First arayüz, veritabanı veya modele uygun kodların hazırlanması işlemidir. Code First işleminde ilk olarak tabloya karşılık gelen sınıf ve özellikler yazılır.
Migration
Uygulama için gerekli olan model ve veritabanı bağlantı ayarları yapıldıktan sonra tablolarımızı oluşturabilmek için Migration işlemini yapmamız gerekir. Migration, modeli oluştuktan sonra veya değişiklik yaptıktan sonra yapılan değişikliğin veritabanına yansımasını sağlar.
Migration işlemini yapabilmek için Visual Studio’dan Package Manager Console alanına “Enable-Migrations” komutunun yazılması gerekmektedir. Migration aktif edildikten sonra “Add-Migration MigrationAdi” komutu ile yeni Migration oluşturmamız gerekmektedir. Migration oluşturulduktan sonra Migrations klasörü içerisinde, tarih_MigrationAdi dosyasında tablo oluşturmak için kullanacağımız komutlar olacaktır. Migration oluşturma işlemi tamamlandıktan sonra, “Update-Database” komutunu kullanarak oluşturulan Migration veritabanına aktarılır.
LINQ Nedir? Nasıl Kullanılır? LINQ Yaklaşımları Nelerdir?
LINQ, Entity Framework, koleksiyonlar ve veritabanları gibi veri kaynağı türlerinden veri almak için oluşturulan sorgu biçimidir. LINQ komutları SQL komutları ile benzerlik göstermektedir.
Şuan da farklı LINQ uygulamarı kullanılmaktadır. Bu uygulamlarda ki en temel özellikleri şunlardır;
LINQ to Objects: Bellek üzerindeki nesnelerden oluşan koleksiyonları sorgulamak,
LINQ to SQL: SQL Server veri tabanındaki tabloları sorgulamak,
LINQ to DataSet: ADO.NET DataSet tiplerini sorgulamak.
LINQ to XML: XML verilerini sorgulamak.
LINQ to Entity: ADO.NET Entity Framework tarafından oluşturulan varlıkları sorgulamak.
Bu LINQ uygulamarı aynı söz dizimini kullanır, ancak farklı veri kümelerini hedeflemektedir.
Örnek Uygulama Kodları;
class OrnekTablo
{
public int ID { get; set; }
public string Ad { get; set; }
public string Soyad { get; set; }
}
class OrnekVeriDbContext : DbContext
{
public DbSet OrnekTablos { get; set; }
}
class Program
{
static void Main(string[] args)
{
OrnekVeriDbContext Veri = new OrnekVeriDbContext();
Veri.Database.Create();
}
}
class VeriEkleme
{
static void Main(string[] args)
{
OrnekVeriDbContext Veri = new OrnekVeriDbContext();
Veri.OrnekTablos.Add(new OrnekTablo
{
Ad = "Berat Talha", Soyad = "Çelik"
});
Veri.SaveChanges();
}
}
class VeriGuncelleme
{
static void Main(string[] args)
{
OrnekVeriDbContext Veri = new OrnekVeriDbContext();
OrnekTablo ornek = Veri.OrnekTablos.FirstOrDefault(o => o.ID == 1);
ornek.Ad = "berat";
ornek.Soyad = "Talha Çelik";
Veri.SaveChanges();
}
}
class VeriSilme
{
static void Main(string[] args)
{
OrnekVeriDbContext Veri = new OrnekVeriDbContext();
OrnekTablo ornek = Veri.OrnekTablos.FirstOrDefault(o => o.ID == 1);
Veri.OrnekTablos.Remove(ornek);
Veri.SaveChanges();
}
}