Entity Framework 7'nin bilmeniz gereken özellikleri

12 Mart 2016 4 dk okuma süresi 286 okunma

Entity Framework 7 bildiğiniz gibi RC1 olarak 18 Kasım 2015'ten beri kullanılıyor. EF 6'da karşılaşılan buglar, performans sorunları bu sürümle beraber gideriliyor. Yapılan açıklamalara göre majör değişiklikler ve performans artışları olacak çünkü EF7 tamamen farklı bir core (çekirdek) üzerine yazılıp EF6'nın devamı niteliğinde olmayacak. Entity Framework'ün yol haritasını Github üzerinden takip edebilirsiniz.

EF7; sql server, sqlite, inmemory, sql server compact 3.5/4.0, Npgsql ve Glimpse destekliyor. Mysql'de destekleyecek fakat henüz net bir bilgi verilmedi. https://docs.efproject.net/en/latest/providers/mysql/index.html#coming-soon

Performans EF6'ya oranla ciddi şekilde artırılmış durumda. Aşağıdaki performans grafiğini inceleyebilirsiniz.

Entity Framework Performans
Entity Framework Performans

Entity Framework 7 Özellikleri ve Yenilikleri

Hafif ve Genişletilebilir

EF geliştiricileri EF6 Api'lerini kullanmak yerine tamamen sıfırdan bir altyapı üzerine geliştirme yaptılar. Tasarım kalıbı (pattern) yine aynı şekilde devam ediyor fakat gereksiz olan şeyler kaldırımış durumda, bu nedenle daha hafif. DbSet ve DbContext yine alışılageldiği gibi kullanılıyor olacak fakat istenildiği gibi genişletilebilir duruma sokulmuş. Yani ihtiyacınıza göre düzenlemeyi tamamen size bırakıyorlar.

Yeni Platform Desteği

Bildiğiniz gibi Wpf, Winforms ve ASP.Net desteği zaten vardı. Fakat Microsoft bununla yetinmeyip diğer platformlarınıda işin içine kattı ve Windows Store, Windows Phone ve Cloud Optimized .Net'te destekleniyor.

Yeni Kayıt Alanları (Data Stores)

ORM adı üzerinde ilişkisel veri tabanı ve ef'de bir orm aracı. Fakat teknolojiler geliştikçe ve ihtiyaçlar farklılaştıkça artık farklı data store'ları da kullanmak gerekiyor. Günümüzde buna en iyi örnek Azure, Redis ve NoSql. EF artık ilişkisel ve ilişkisel olmayan veri tabanlarınıda destekliyor. Bunlara Microsoft tarafında en iyi örnekte Azure table storage.

Optimize Sorgu Oluşturma

EF kullanıcılarının en büyük sıkıntısı ef'nin arka planda oluşturduğu sql sorgularının karışıklığı ve performans sıkıntılarıydı. EF7 ile birlikte geliştiriciler bu istekleri görmezden gelmedi ve daha basit ve hızlı sorgular oluşturabilmek için çalışıyorlar. Muhtemelen EF 7'nin son sürümü ile "Improved SQL Generation" özelliği gelecek.

Code First Olayı

Sonunda edmx'ten kurtuluyoruz. Edmx'in kötü bir yanı tabiki yok ama gereksiz zaman kaybettirmesi, bazen db'deki değişikliklerin algılanmaması gibi sıkıntılar nedeniyle kullanıcılar (başta ben olmak üzere) çileden çıkıyorduk. Edmx tamamen kaldırılıyor gibi görünse de yine 3. parti araçlar sayesinde kullanılabilecek. Eğer edmx'ten vazgeçemiyorsanız Julie Lerman'ın şu yazısını okumanızı tavsiye ederim.

Toplu Güncelleme (Batch Update)

EF'nin batch update olayı tamamen değişiyor. Çünkü EF7 ile inbuilt desteği geliyor ve EF artık her insert/update/delete için ayrı ayrı komut göndermeyecek. Tek seferde çoklu komut gönderebileceği için haliyle performans artışı da olacak.

Benzersiz Kısıtlar (Unique Constraints - Alternate Keys)

EF7 entity'ler üzerine primary key'e ek benzersiz kısıtlar getirebiliyor olacak. Foreign key'leri alternatif key'ler yaratarak birbiri ile ilişkilendirebileceksiniz. Detaylı bilgi için şu dökümantasyona veya şu yazıya göz atabilirsiniz.

Örnek:

modelBuilder.Entity<User>()  
    .HasAlternateKey(x => x.UserCode)  
    .HasName("AlternateKey_UserCode");
// User üzerinde bulunan UserCode ile farklı bir tabloyu bağlayabilirsiniz.

InMemory Provider

Bu olay test amaçlıdır, yani context'inizi tekrar modellemeden hızlıca kullanabilmenizi sağlar, kısaca fake context yaratır ve kullanırsınız. InMemory olayı verinin tümüyle diske yazılmayıp hafızada tutulması olayıdır. Yani veritabanının ram üzerinde olduğunu düşünebilirsiniz. Haliyle çok daha hızlıdır. InMemory alanı gerçek veritabanı gibi davranır ve veritabanında yaptığınız işlemlerin aynılarını bunda da yapabilirsiniz. Daha detaylı bilgi için şu dökümantasyona göz atabilirsiniz.

Loglama (Logging)

EF7 kendi üzerinde loglama özelliği ile beraber geliyor. Bu nedenle loglama için ekstra class'lar yazmak zorunda kalmıyorsunuz. EF7 Microsoft'un Microsoft.Framework.Logging ve ILoggingFactory özelliği üzerine kurulmuş.

// Startup.cs'nin içine yazıyoruz.
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    loggerFactory.AddDebug(LogLevel.Verbose);
    // kendinize göre düzenlemek istediğiniz ayarları buraya yazabilirsiniz.
}

Shadow Properties (Gölge Özellikler)

Shadow properties dediğimiz entity class'ları üzerinde olmayan özellikler anlamına gelir. Bunları change tracker organize eder. Bir blog makaleniz olduğunu düşünün ve son güncelleme tarihinin olmadığını varsayın. Bu özelliği OnModelCreating kısmında model builder ile yazabilirsiniz.

Avantajı entity üzerinde olmayan şeyleri data model'e tanımlamadan kullanabilirsiniz.

Shadow properties'i Data Annotiations ile yaratamazsınız.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Makale>()
        .Property<DateTime>("SonGuncelleme");
}
// Aşağıdaki gibi kullanabilirsiniz.
context.Entry(makale).Property("SonGuncelleme").CurrentValue = DateTime.Now;
// Liste ile kullanmak isterseniz
var makale_listesi = context.Makale
    .OrderBy(x => EF.Property<DateTime>(x, "SonGuncelleme"));


Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
VS2015'in 3. update'ini yaptıktan sonra asp.net core web uygulaması yaratmak istediğimde şu şekilde bir hata ile karşılaştım. "Exception : The system cannot find the file specified. (Exception from HRESULT: 0x80070002)". Çözümü oldukça basit.

Entity framework code first kullanıyorsanız ve inheritance yapıp yeni bir class yarattığınızda bunun gibi bir hata alırsınız. Bunun nedeni fluent api'nin inheritance yapılan class ile ana class'ın map yapmaya çalışması ve ilgili kolonu veritabanında bulamamasıdır. Çözümü ise inherit olmuş class'a [NotMapped] DataAnnotations attribute'unu eklemek.

Asp.Net Mvc ile recursive nasıl yazılır, @helper veya HtmlHelper kullanarak recursive fonksiyon yazmak, Asp.Net MVC View recursive fonksiyon nasıl yazılır?