'dan gelen sunucu sonuçlarını sınırlandırın VS 2012'de bir NHAbernate yazılımı oluşturdum ve NHibernate'i ORM olarak kullanıyorum ve Odata desteğini etkinleştirmeyi düşünüyorum. Bu nedenle, veritabanımdaki bir tablodan varlıkların listesini döndüren tek bir Get yöntemiyle bir test denetleyicisi oluşturdum.WebApi denetleyicisinden ve ODATA w/Nhibernate
Her şey iyi çalışıyor, sonuçları filtrelemek ve sipariş vermek için OData'yı kullanabilirim. Sorun, veritabanından denetleyiciye döndürülen veri miktarını sınırlamanın bir yolunu bulamadım ve bu tablo içinde milyonlarca kayıt var.
Queryable
özniteliğinin PageSize
özelliğinin kullanılması, istemciye döndürülen veri miktarını sınırlandırıyor gibi görünüyor, ancak DB'den döndürülen veri miktarı yok.
bunu dönmeden önce olsun yönteminin içine IQueryable
üzerinde Take(n)
uygulayarak denedim ve sonuç DB'den geri getirdi sınırlar, ancak değil bir varlık sorgulamak çalışırsanız bu yana, OData filtreleme kırar İlk n sonuçlarında, boş bir koleksiyona geri dönüyor.
Bunu gerçekleştirmek için OData'daki $Top
parametresini kullanabileceğinizi biliyorum, ancak gereksiz yere binlerce veya hatta milyonlarca kayıt getirmediğimden emin olmak için istemciye/tüketiciye bağlı olmamak istiyorum. Kullanmayacağım.
Ayrıca, istemcinin sorgu dizesinde bir Üst parametre sağlayıp sağlamadığını, Queryable'a OData dönüşümünü uygulayıp sonra dönüştürülen sorgu üzerinde Take(n)
yöntemini uygulayıp uygulamadığını da elle denedim. Bu yaklaşım, OData aracılığıyla herhangi bir varlık için filtreleme yapmamı sağladı, ancak sayfalandırma kırılıyor, çünkü $Skip=n
parametresini kullanırsam boş bir koleksiyona geri dönüyor.
OData desteğini kesmemekle birlikte, DB'den getirilen sonuçları güvenilir şekilde sınırlamanın herhangi bir yolu var mı?
OData ve NHibernate arasında köprü olarak ne kullanıyorsunuz? OData'yı bir NHibernate IQueryable'a dönüştürmeyi mi yoksa bir kütüphaneyi mi kullanıyorsunuz? Ayrıca, geçmişte, kullanıcıların bir API üzerinden döndürülen tüm sonuçlarda otomatik olarak TOP 1000'i uyguladıklarını ve yalnızca istenen verilerin bir kısmını aldıklarını ve genellikle arayanın önceden oluşturulmuş bir URL sağladığını belirten bazı bilgiler gönderdiklerini gördüm sonraki 1000 sonuçlara geri dönecek. Arayan tüm verileri aldıkça verilen URL'leri kullanmaya devam edecektir. –
Sorguları doğrudan oluşturmak için OData kullanmıyorum, ancak istemcimin döndürülen sonuçları varolan yöntemlerden filtrelemesi için bir kolaylık aracı olarak kullanıyorum. Örneğin, örneğin, NHibernate için Linq kullanarak bir querie gerçekleştiren bir GetAllProducts() yöntemim var ve bu IQueryable'ı döndürüyorum. Tanımladığınız davranış, PageSize özelliğini Queryable atribute üzerinde kullanırken varsayılan davranıştır, ancak yazımda bahsettiğim gibi bu yalnızca istemcinin ne aldığını sınırlar, ancak DB'den hizmet yöntemime getirilen sonuçları değil. – andyroschy