LINQ - Varlıklar

LINQ to Entities, geliştiricilerin Visual Basic veya Visual C# kullanarak Entity Framework kavramsal modele yönelik sorgular yazmasını sağlayan Language-Integrated sorgu (lınq) desteği sağlar. Entity Framework yapılan sorgular, nesne bağlamına göre yürütülen komut ağacı sorgularıyla temsil edilir. LINQ to Entities Language-Integrated sorguları (lınq) sorgularını komut ağacı sorgularına dönüştürür, sorguları Entity Framework karşı yürütür ve hem Entity Framework hem de lınq tarafından kullanılabilecek nesneleri döndürür. LINQ to Entities bir sorgu oluşturma ve yürütme süreci aşağıda verilmiştir:

  1. Öğesinden bir ObjectQuery<T> örnek oluşturun ObjectContext .

  2. örneği kullanarak C# veya Visual Basic LINQ to Entities bir sorgu oluşturun ObjectQuery<T> .

  3. LINQ standart sorgu işleçlerini ve ifadelerini komut ağaçlarına Dönüştür.

  4. Sorguyu, komut ağacı gösteriminde, veri kaynağına karşı yürütün. Yürütme sırasında veri kaynağında oluşan tüm özel durumlar doğrudan istemciye geçirilir.

  5. Sorgu sonuçlarını istemciye geri döndürün.

ObjectQuery örneği oluşturma

ObjectQuery<T>Genel sınıf, sıfır veya daha fazla türü belirtilmiş varlıkların koleksiyonunu döndüren bir sorguyu temsil eder. Bir nesne sorgusu, genellikle el ile oluşturulması yerine var olan bir nesne bağlamından oluşturulur ve bu nesne bağlamına her zaman aittir. Bu bağlam, sorguyu oluşturmak ve yürütmek için gerekli olan bağlantı ve meta veri bilgilerini sağlar. ObjectQuery<T>Genel sınıf IQueryable<T> , Oluşturucu yöntemleri LINQ sorgularının artımlı olarak derlenme özelliğini etkinleştiren genel arabirimini uygular. ayrıca derleyicinin, C# anahtar sözcüğünü kullanarak varlık türünü var ( Dim Visual Basic, yerel tür çıkarımı etkinleştirilmiş olarak) çıkarmasına izin verebilirsiniz.

Sorguları oluşturma

genel ObjectQuery<T> arabirimi uygulayan genel sınıfın örnekleri, IQueryable<T> LINQ to Entities sorguları için veri kaynağı olarak görev yapar. Bir sorguda, tam olarak veri kaynağından almak istediğiniz bilgileri belirtirsiniz. Bir sorgu, döndürülmeden önce bu bilgilerin nasıl sıralanacağını, gruplanacağını ve şekillendirilmiş olduğunu da belirtebilir. LINQ içinde, bir sorgu bir değişkende depolanır. Bu sorgu değişkeni hiçbir eylemde bulunmaz ve veri döndürmez; yalnızca sorgu bilgilerini depolar. Bir sorgu oluşturduktan sonra, verileri almak için bu sorguyu yürütmeniz gerekir.

LINQ to Entities sorguları iki farklı sözdizimde olabilir: sorgu ifadesi sözdizimi ve yöntem tabanlı sorgu söz dizimi. sorgu ifadesi söz dizimi ve yöntem tabanlı sorgu söz dizimi C# 3,0 ve Visual Basic 9,0 ' de yenidir.

Daha fazla bilgi için bkz. LINQ to Entities sorguları.

Sorgu dönüştürme

Entity Framework karşı LINQ to Entities bir sorgu yürütmek için, lınq sorgusunun Entity Framework karşı yürütülebilecek bir komut ağacı gösterimine dönüştürülmesi gerekir.

LINQ to Entities sorguları lınq standart sorgu işleçlerinden (örneğin, Select Where , ve GroupBy ) ve ifadeler (x > 10, Contact. LastName, vb.) oluşur. LINQ işleçleri bir sınıf tarafından tanımlanmamıştır, ancak bunun yerine bir sınıf üzerinde yöntemler vardır. LINQ içinde, ifadeler ad alanındaki türlerin izin verdiği herhangi bir şeyi System.Linq.Expressions ve uzantıya göre, bir lambda işlevinde temsil edilebilir her şeyi içerebilir. Bu, tanım tarafından veritabanında izin verilen işlemlere kısıtlanmış ve tarafından desteklenen Entity Framework izin verilen ifadelerin bir üst kümesidir ObjectQuery<T> .

Entity Framework, her iki işleç ve ifade, bir komut ağacına yerleştirilmiş olan tek bir tür hiyerarşisi tarafından temsil edilir. Komut ağacı, sorguyu yürütmek için Entity Framework tarafından kullanılır. LINQ sorgusu bir komut ağacı olarak ifade edilemiyorsa, sorgu dönüştürülürken bir özel durum oluşturulur. LINQ to Entities sorgularının dönüştürülmesi iki alt dönüştürme içerir: standart sorgu işleçleri dönüştürme ve ifadelerin dönüştürülmesi.

LINQ to Entities içinde geçerli bir çeviriye sahip olmayan bir dizi LINQ standart sorgu işleci vardır. Bu işleçleri kullanma girişimleri, sorgu çevirisi zamanında bir özel durumla sonuçlanır. desteklenen LINQ to Entities işleçleri listesi için bkz. desteklenen ve desteklenmeyen lınq yöntemleri (LINQ to Entities).

LINQ to Entities 'de standart sorgu işleçlerini kullanma hakkında daha fazla bilgi için, bkz. LINQ to Entities sorgularda standart sorgu işleçleri.

genel olarak, LINQ to Entities ifadeleri sunucuda değerlendirilir, bu nedenle ifadenin davranışının CLR semantiğini izlemesi beklenmemelidir. daha fazla bilgi için bkz. LINQ to Entities sorgulardaki ifadeler.

CLR yöntemi çağrılarının veri kaynağında kurallı işlevlere nasıl eşlenildiği hakkında bilgi için bkz. clr Method to kurallı Işlev eşlemesi.

LINQ to Entities sorguların içinden kurallı, veritabanı ve özel işlevleri çağırma hakkında daha fazla bilgi için bkz. LINQ to Entities sorgularda işlevleri çağırma.

Sorgu Yürütme

LINQ sorgusu Kullanıcı tarafından oluşturulduktan sonra, bu, daha sonra veri kaynağında yürütülen Entity Framework (komut ağaçları biçiminde) ile uyumlu bir gösterimine dönüştürülür. Sorgu yürütme sırasında, istemci veya sunucu üzerinde tüm sorgu ifadeleri (veya sorgunun bileşenleri) değerlendirilir. Bu, sonuç gerçekleştirmesi veya varlık projeksiyonde kullanılan ifadeleri içerir. Daha fazla bilgi için bkz. sorgu yürütme. Bir sorguyu bir kez derleyip daha sonra farklı parametrelerle birkaç kez yürütürken performansı geliştirme hakkında daha fazla bilgi için bkz. derlenmiş sorgular (LINQ to Entities).

Gerçekleştirmesi

Materialization, sorgu sonuçlarının istemciye CLR türleri olarak geri döndürülmesi işlemidir. LINQ to Entities, sorgu sonuçları veri kayıtları hiçbir şekilde döndürülmez; Kullanıcı tarafından veya Entity Framework tarafından tanımlanan veya derleyici (anonim türler) tarafından oluşturulan bir destek CLR türü her zaman vardır. Tüm nesne gerçekleştirmesi Entity Framework tarafından gerçekleştirilir. Entity Framework ile CLR arasında eşleme yapılmamasına neden olan hatalar, nesne materialization sırasında özel durumların oluşturulmasına neden olur.

Sorgu sonuçları genellikle aşağıdakilerden biri olarak döndürülür:

  • Sıfır veya daha fazla yazılmış varlık nesnesi koleksiyonu veya kavramsal modelde tanımlanan karmaşık türlerin bir kümesi.

  • Entity Framework tarafından desteklenen CLR türleri.

  • Satır içi Koleksiyonlar.

  • Anonim türler.

Daha fazla bilgi için bkz. sorgu sonuçları.

Bu Bölümde

LINQ to Entities Sorguları

LINQ to Entities Sorgu İfadeleri

LINQ to Entities Sorgularında Çağırma İşlevleri

Derlenmiş Sorgular (LINQ to Entities)

Sorgu Yürütme

Sorgu sonuçları

LINQ to Entities Sorgularında Standart Sorgu İşleçleri

CLR Yöntemini Kurallı İşlev ile Eşleme

Desteklenen ve Desteklenmeyen LINQ Yöntemleri (LINQ to Entities)

LINQ to Entities Hakkında Bilinen Sorunlar ve Dikkat Edilmesi Gerekenler

Ayrıca bkz.