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.
LINQ to Entities sorgusu komut ağaçlarına dönüştürüldükten ve yürütüldükten sonra sorgu sonuçları genellikle aşağıdakilerden biri olarak döndürülür:
Sıfır veya daha fazla tipi belirlenmiş varlık nesnesi koleksiyonu veya kavramsal modeldeki karmaşık tiplerin yansıması.
Kavramsal modelde desteklenen CLR türleri.
Satır içi koleksiyonlar.
Anonim türler.
Sorgu veri kaynağında yürütülürken sonuçlar CLR türlerine dönüştürülür ve istemciye döndürülür. Tüm nesne gerçekleştirme, Entity Framework tarafından gerçekleştirilir. Entity Framework ile CLR arasında eşlenemez durumdan kaynaklanan hatalar nesne gerçekleştirme sırasında özel durumların atılmasıyla sonuçlanır.
Sorgu yürütme ilkel kavramsal model türlerini döndürürse, sonuçlar tek başına olan ve Entity Framework ile bağlantısı kesilmiş CLR türlerinden oluşur. Ancak, sorgu tarafından temsil edilen ObjectQuery<T>, türü belirtilen varlık nesnelerinin bir koleksiyonunu döndürürse, bu türler nesne bağlamı tarafından izlenir. Tüm nesne davranışı (alt/üst koleksiyonlar, değişiklik izleme, çok biçimlilik vb.) Entity Framework'te tanımlandığı şekildedir. Bu işlev, Entity Framework'te tanımlandığı gibi kapasitesinde kullanılabilir. Daha fazla bilgi için bkz. Nesnelerle Çalışma.
Sorgulardan döndürülen yapı türleri (anonim türler ve null atanabilir karmaşık türler gibi) null
değere sahip olabilir.
EntityCollection<TEntity> Döndürülen bir varlığın özelliği de null
değerine sahip olabilir. Bu, null
değerine sahip bir FirstOrDefault varlığın ObjectQuery<T> koleksiyon özelliğini yansıtmaktan kaynaklanabilir, örneğin öğe içermeyen bir FirstOrDefault üzerinde null
çağırmak.
Bazı durumlarda, bir sorgu yürütülürken somut bir sonuç oluşturuyor gibi görünebilir, ancak sorgu sunucuda yürütülür ve varlık nesnesi CLR'de hiçbir zaman somutlaşmaz. Nesne gerçekleştirmenin yan etkilerine bağlıysanız bu sorunlara neden olabilir.
Aşağıdaki örnek, MyContact
özelliği olan özel bir LastName
sınıfını içerir.
LastName
Özelliği ayarlandığında, bir count
değişken artırılır. Aşağıdaki iki sorguyu yürütürseniz, ilk sorgu artarken ikinci sorgu artmayacak count
. Bunun nedeni, ikinci sorguda LastName
özelliğinin sonuçlardan yansıtılması ve MyContact
sınıfının, bu sorgunun depoda yürütülmesi gerekmediği için, hiçbir zaman oluşturulmamasıdır.
public static int count = 0;
static void Main(string[] args)
{
using (AdventureWorksEntities AWEntities = new AdventureWorksEntities())
{
var query1 = AWEntities
.Contacts
.Where(c => c.LastName == "Jones")
.Select(c => new MyContact { LastName = c.LastName });
// Execute the first query and print the count.
query1.ToList();
Console.WriteLine("Count: " + count);
//Reset the count variable.
count = 0;
var query2 = AWEntities
.Contacts
.Where(c => c.LastName == "Jones")
.Select(c => new MyContact { LastName = c.LastName })
.Select(my => my.LastName);
// Execute the second query and print the count.
query2.ToList();
Console.WriteLine("Count: " + count);
}
Console.WriteLine("Hit enter...");
Console.Read();
}
Public count As Integer = 0
Sub Main()
Using AWEntities As New AdventureWorksEntities()
Dim query1 = AWEntities.Contacts _
.Where(Function(c) c.LastName = "Jones") _
.Select(Function(c) New MyContact With {.LastName = c.LastName})
' Execute the first query and print the count.
query1.ToList()
Console.WriteLine("Count: " & count)
' Reset the count variable.
count = 0
Dim query2 = AWEntities _
.Contacts() _
.Where(Function(c) c.LastName = "Jones") _
.Select(Function(c) New MyContact With {.LastName = c.LastName}) _
.Select(Function(x) x.LastName)
' Execute the second query and print the count.
query2.ToList()
Console.WriteLine("Count: " & count)
End Using
End Sub
public class MyContact
{
String _lastName;
public string LastName
{
get
{
return _lastName;
}
set
{
_lastName = value;
count++;
}
}
}
Public Class MyContact
Private _lastName As String
Public Property LastName() As String
Get
Return _lastName
End Get
Set(ByVal value As String)
_lastName = value
count += 1
End Set
End Property
End Class