Blog girişi, yüzlerce girişe sahip bir BlogEntries koleksiyonuna sahipse, önce EF koduyla herhangi bir sunucu tarafı sayfalama işlevi eklemenin bir yolu var mı? Örneğin, bir DbSet üzerinde yaptığınız gibi tipik bir .Skip (x) .Take (y) yaparsam, tüm koleksiyonu yükler ve belleğe sığdırır mı?Varlık çerçeve kodunda ilk önce gezinme koleksiyonlarına sayfalama eklemek için bir yol var mı?
7
A
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
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();
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
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). –
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