2012-04-30 20 views

cevap

14

Doğrudan DbSet sorgusu yaparsanız, Take and Skip'i kullanabilirsiniz ve gerçekten veritabanı sunucusundaki çağrıları yürütür (bu yöntem çağrıları SQL'e çevrilir). Yani bu beklendiği gibi çalışır: Eğer açık yükleme

kullanmalıdır navigasyon mülkiyet sayfalama almak istiyorsanız

var blog = context.Blogs.First(); 
// Lazy loading always loads all related entries and executes ordering and 
// paging through Linq-to-objects! 
var entires = blog.BlogEntries.OrderBy(e => e.Date).Skip(10).Take(10); 

:

// Loads only 10 expected entries through Linq-to-entities 
var entries = context.BlogEntries.OrderBy(e => e.Date).Skip(10).Take(10); 

bu şekilde çalışmıyor yüklü bir varlık o çağrı navigasyon özelliklerini dikkat

var blog = context.Blogs.First(); 
var dbEntry = context.Entry(blog); 
// This is the way to use Linq-to-entities on navigation property and 
// load only subset of related entities 
var entries = dbEntry.Collection(b => b.BlogEntries) 
        .Query() 
        .OrderBy(e => e.Date) 
        .Skip(10) 
        .Take(10) 
        .Load(); 
+1

Teşekkürler! Bunu EF ile başarmak için bir arka kapı var sevindim. Gelecek sürümlerde umuyoruz ki bunu yapmak için bir yol var, bu yüzden bunu gerçekleştirmek için DbContext'e gitmek zorunda değiliz. Eğer NHibernate gibi toplama (Select'i seçin (1) ve SQL'de Varsa) kullanarak yüklemeden .Count() ve .Any() yapıp yapmadığını biliyor musunuz? – Jason

+1

Gezinme özelliği, yalnızca saymak için bile, ilgili tüm öğeleri yükler. “Count” ı desteklemek için [ekstra yükleme] gerekir (http://data.uservoice.com/forums/72025-entity-framework-feature-suggestions/suggestions/1050591-extra-lazy-loading). –

+0

Eğer farklı bir için aynı veri bağlamında tekrar '.Load()' diyorsak, * onu değiştirmek yerine koleksiyonun bir sonraki sayfasına eklenir. Yeni bir veri içeriği oluşturmanın dışında, bunun etrafında herhangi bir yolu var mı? – Cocowalla

İlgili konular