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.
Bu konu başlığı altında, LINQ ve Find yöntemi de dahil olmak üzere Entity Framework kullanarak verileri sorgulamanın çeşitli yolları açıklanır. Bu konuda gösterilen teknikler, Code First ve EF Designer ile oluşturulan modellere eşit şekilde uygulanır.
Sorgu kullanarak varlıkları bulma
DbSet ve IDbSet, IQueryable uygular ve bu nedenle veritabanına linq sorgusu yazmak için başlangıç noktası olarak kullanılabilir. Burası LINQ'in ayrıntılı bir tartışması için uygun bir yer değildir, ancak birkaç basit örnek aşağıda verilmiştir:
using (var context = new BloggingContext())
{
// Query for all blogs with names starting with B
var blogs = from b in context.Blogs
where b.Name.StartsWith("B")
select b;
// Query for the Blog named ADO.NET Blog
var blog = context.Blogs
.Where(b => b.Name == "ADO.NET Blog")
.FirstOrDefault();
}
DbSet ve IDbSet'in her zaman veritabanında sorgular oluşturduğunu ve döndürülen varlıklar bağlamda zaten mevcut olsa bile her zaman veritabanına gidiş dönüş içereceğini unutmayın. Aşağıdaki durumlarda veritabanında bir sorgu yürütülür:
- Bir foreach (C#) veya For Each (Visual Basic) deyimiyle numaralandırılır.
- ToArray, ToDictionary veya ToList gibi bir koleksiyon işlemi tarafından numaralandırılır.
- İlk veya Herhangi Biri gibi LINQ işleçleri sorgunun en dış kısmında belirtilir.
- Aşağıdaki yöntemler çağrılır: DbSet, DbEntityEntry.Reload ve Database.ExecuteSqlCommand üzerindeki Load uzantısı yöntemi.
Veritabanından sonuçlar döndürüldüğünde, bağlamda bulunmayan nesneler bağlama eklenir. Bir nesne zaten bağlamdaysa, var olan nesne döndürülür (girdideki nesne özelliklerinin geçerli ve özgün değerlerinin üzerine veritabanı değerleri yazılmaz ).
Bir sorgu gerçekleştirdiğinizde, bağlama eklenmiş ancak henüz veritabanına kaydedilmemiş varlıklar sonuç kümesinin bir parçası olarak döndürülmüyor. Bağlamdaki verileri almak için bkz. Yerel Veriler.
Sorgu veritabanından satır döndürmezse, sonuç null yerine boş bir koleksiyon olur.
Birincil anahtarları kullanarak varlıkları bulma
DbSet'te Find yöntemi, bağlama göre izlenen bir varlığı bulmaya çalışmak için birincil anahtar değerini kullanır. Varlık bağlamda bulunamazsa, varlığı orada bulmak için veritabanına bir sorgu gönderilir. Varlık bağlamda veya veritabanında bulunmazsa Null döndürülür.
Bul, sorguyu iki önemli şekilde kullanmaktan farklıdır:
- Veritabanına erişim, yalnızca verilen anahtara sahip nesne bağlamda bulunamadığında gerçekleştirilecektir.
- Bul, Eklendi durumundaki varlıkları döndürür. Başka bir ifadeyle, Find bağlama eklenmiş ancak henüz veritabanına kaydedilmemiş varlıkları döndürür.
Birincil anahtara göre varlık bulma
Aşağıdaki kod, Bul'un bazı kullanımlarını gösterir:
using (var context = new BloggingContext())
{
// Will hit the database
var blog = context.Blogs.Find(3);
// Will return the same instance without hitting the database
var blogAgain = context.Blogs.Find(3);
context.Blogs.Add(new Blog { Id = -1 });
// Will find the new blog even though it does not exist in the database
var newBlog = context.Blogs.Find(-1);
// Will find a User which has a string primary key
var user = context.Users.Find("johndoe1987");
}
Bileşik birincil anahtara göre varlık bulma
Entity Framework, varlıklarınızın bileşik anahtarlara sahip olmasını sağlar. Bu, birden fazla özellikten oluşan bir anahtardır. Örneğin, belirli bir blog için kullanıcı ayarlarını temsil eden bir BlogSettings varlığınız olabilir. Bir kullanıcının her blog için yalnızca bir BlogAyarları olabileceğinden, BlogAyarlar'ın birincil anahtarını BlogKimliği ve Kullanıcı Adı'nın bir bileşimi haline getirmeyi seçebilirsiniz. Aşağıdaki kod BlogKimliği = 3 ve Kullanıcı Adı = "johndoe1987" ile BlogSettings'i bulmaya çalışır:
using (var context = new BloggingContext())
{
var settings = context.BlogSettings.Find(3, "johndoe1987");
}
Bileşik anahtarlara sahip olduğunuzda, bileşik anahtarın özellikleri için bir sıralama belirtmek üzere ColumnAttribute veya fluent API kullanmanız gerektiğini unutmayın. Bul çağrısı, anahtarı oluşturan değerleri belirtirken bu sırayı kullanmalıdır.