Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Entity Framework Core, veritabanındaki verileri sorgulamak için Dil Tümleşik Sorgusu (LINQ) kullanır. LINQ, türetilmiş bağlamınıza ve varlık sınıflarınıza göre kesin olarak yazılan sorgular yazmak için C# (veya tercih ettiğiniz .NET dili) kullanmanıza olanak tanır.
Uyarı
Bu makale güncel değil ve sorgu işlem hattının tasarımında gerçekleşen değişiklikleri hesaba eklemek için bazı bölümlerinin güncelleştirilmesi gerekiyor. Burada bahsedilen herhangi bir davranışla ilgili şüpheleriniz varsa lütfen bir soru sorun.
Sorgunun ömrü
Aşağıdaki açıklama, her sorgunun geçtiği işleme üst düzey bir genel bakıştır.
- LINQ sorgusu, veritabanı sağlayıcısı tarafından işlenmeye hazır bir gösterim oluşturmak için Entity Framework Core tarafından işlenir
- Sonuç önbelleğe alınır, böylece sorgu her yürütülürken bu işlemenin yapılması gerekmez
- Sonuç veritabanı sağlayıcısına geçirilir
- Veritabanı sağlayıcısı, veritabanında sorgunun hangi bölümlerinin değerlendirilebileceğini tanımlar
- Sorgunun bu bölümleri veritabanına özgü sorgu diline (örneğin, ilişkisel veritabanı için SQL) çevrilir
- Veritabanına bir sorgu gönderilir ve sonuç kümesi döndürülür (sonuçlar varlık örnekleri değil veritabanındaki değerlerdir)
- Sonuç kümesindeki her öğe için
- Sorgu bir izleme sorgusuysa EF, verilerin bağlam örneğinin değişiklik izleyicisinde zaten var olan bir varlığı temsil ediyor olup olmadığını denetler
- Öyleyse, mevcut varlık geri döndürülür
- Aksi takdirde yeni bir varlık oluşturulur, değişiklik izleme ayarlanır ve yeni varlık döndürülür
- Sorgu izleme gerektirmeyen bir sorguysa, her zaman yeni bir varlık oluşturulup döndürülür.
- Sorgu bir izleme sorgusuysa EF, verilerin bağlam örneğinin değişiklik izleyicisinde zaten var olan bir varlığı temsil ediyor olup olmadığını denetler
Sorgular yürütülürken
LINQ işleçlerini çağırdığınızda, yalnızca sorgunun bellek içi gösterimini oluşturursunuz. Sorgu yalnızca sonuçlar tüketildiğinde veritabanına gönderilir.
Sorgunun veritabanına gönderilmesine neden olan en yaygın işlemler şunlardır:
- Döngüde sonuçları yineleme
- Operatörlerden biri olan
ToList,ToArray,Single,Countveya eşdeğer zaman uyumsuz aşırı yüklemeleri kullanarak
Uyarı
Kullanıcı girişini her zaman doğrulayın: EF Core, parametreleri kullanarak ve sorgulardaki değişmez değerlerden kaçarak SQL ekleme saldırılarına karşı koruma sağlar ancak girişleri doğrulamaz. LinQ sorgularında güvenilir olmayan kaynaklardan gelen değerler kullanılmadan, varlık özelliklerine atanmadan veya diğer EF Core API'lerine geçirilmeden önce uygulamanın gereksinimlerine göre uygun doğrulama gerçekleştirilmelidir. Bu, sorguları dinamik olarak oluşturmak için kullanılan tüm kullanıcı girişlerini içerir. LINQ kullanırken bile, ifade oluşturmak için kullanıcı girişini kabul ediyorsanız, yalnızca hedeflenen ifadelerin oluşturulabildiğinden emin olmanız gerekir.