Sitemap

Entity Framework Tips & Tricks

2 min readDec 8, 2023

--

AsNoTracking Kullanımı

Entity Framework ile datalara erişilir ve sonrasında SaveChanges() methodu ile erişilen entityler üzerinde işlem yapılabilir.(Örneğin; update,delete,add). EF’in bunu yapabilmesinin nedeni, getirdiğimiz varlıkların DbContext tarafından izlenmesi ve önbelleğe alınmasıdır. Çekilen veriler SaveChanges methodu çağırılana kadar ki süreçte takip edilmekte, depolanmaktadır. Okuma işlemi yapılan veriler üzerinde herhangi silme,ekleme ve güncellenme işlemi yapılamayacaksa oluşturulan linqya AsNoTracking() eklenerek takip kaldırılabilir. Bu şekilde performansa fayda sağlanmış olacaktır.


this.context.Entities.AsNoTracking()
.Where(x => x.CutomerId == customerId);

Select Kullanımı

Entitynin yalnızca bir propertysine ihtiyaç duyuluyorsa , tüm propertylerin verilerini çekmek yerilene select() ile yalnızca ihtiyaç duyulan alan çağırılabilmektedir.

this.context.Entities.Select(e => e.Amount).ToList();

Skip Take ile Sayfalama

Bir sayfada dataların belli bir kısmı gösterilecekse tüm datayı çekmek gereksiz olacaktır. Sayfalama işlemleri için skip() take() methodları kullanılabilir. Skip methodu ile istenilen kayıt sayılısı atlanır ve take methodu ile kaç tane kayıt çekileceği belirlenir. Örneğin ilk 5 kayıt sonrasındaki 3 kayıt çekilmektedir.

Get buket pehlivan’s stories in your inbox

Join Medium for free to get updates from this writer.

var data = this.context.Customers.AsNoTracking().Skip(5).Take(3).ToList();

SaveChanges Kullanımı

SaveChanges() metodu çağırılana kadar entitylerde yapılan tüm değişiklikler izlenmeye devam etmektedir. SaveChanges ile tüm değişiklikler kalıcı hale getirilmektedir. Yani database ile iletişim kurulmaktadır. Birbirini etkilemeyen işlemlerde ihtiyaç olmaması halinde her add , update , remove işleminden sonra SaveChanges metodu çağrılmamalı, tüm işlemler bittikten sonra çalıştırılmalıdır. Böylece performansa etki etmektedir.

Async QueryableExtensions Kullanımı

Asenkron kod kullanmak, uygulamalarımızın performansını arttırabilmektedir. Senkron queryableextensionsların asenkron karşılıkları kullanılabilmektedir.

async Task<Entity> Update(IEntityUpdate updateModel)
{
var dbModel = await this.context.Entities
.FirstOrDefaultAsync(e => e.CustomerId = updateModel.CustomerId);
dbModel.Prop1 = updateModel.Prop1;
dbModel.Prop2 = updateModel.Prop2;
await this.context.SaveChangesAsync();
}

Contains Kullanımı

Gerek olmadıkça contains kullanımından kaçınılmalıdır. Contains sqldeki in() fonksiyonuna karşılık gelmektedir. Tüm datalar check edildikten sonra sonuç döner ve performansı olumsuz etkileyebilir.

Karmaşık Queryler

LINQ kullanılarak kolayca ifade edilemeyen karmaşık sorguların yürütülmesi gereken durumlar olabilir. Bu tür durumlarda, EF içinde parametreli SQL sorgularını doğrudan yürütmek için FromSqlRaw() veya ExecuteSqlCommand() yöntemlerini kullanılabilir. Bu şekilde performans sql queryleri ile yönetilebilir.

--

--