Bir sorguyu hızlandırmak için Kriter kullanıyorum ve neredeyse varım.NHibernate Kriterleri QueryByExample Orta 0'da SQL'de sıkışmış
Tablodaki satırları eşleştirmek için Örnekle Sorguyu Kullanarak, yinelenen satırları aynı kimliğe sahip olarak kaldırın ve ardından sayfalara ayırın.
Yinelenen satırları kaldırana kadar tablomlamıyorum ve bunu nasıl yapacağımı bilmiyorum. SQL'de yapılabilir, ancak akıcı kod ile uyumludur, ISQLQuery bir ICriteria nesnesi döndürmez. Okuduğum
public IList<EntitySearch> CriteriaSearch(EntitySearch exampleEntitySearch, int startingPage, int pageSize)
{
var startRow = startingPage * pageSize;
// Query By Example.
var example = Example.Create(exampleEntitySearch)
.IgnoreCase()
.EnableLike(MatchMode.Anywhere)
.ExcludeZeroes();
var results = this.Session.CreateCriteria(typeof(EntitySearch))
.Add(example)
// select * from (SELECT ROW_NUMBER()OVER (partition by Id order by Id) As rankOrder, * FROM EntitySearch) as original where original.rankOrder = 1
.SetFirstResult(startRow)
.SetMaxResults(pageSize)
.List<DealSearch>();
return results;
}
Önerileri NHibernate SQL sorgusu yazmaya, ama şık "bölümü SQL üzerinde ROW_NUMBER()" dönüştürmek için nasıl düşünemiyorum. İlk önce sonuna kadar çalışmak, daha zarif yapmak istiyorum.
Bu spike'ı üretime almak ve ~% 90'lık hızı kanıtlamak istiyorum.
Değişim:
.List<DealSearch>();
için: LINQ
Iyi NHibernate içinde kodlanmış SQL çalıştırmak yapabilirsiniz senin kod ama sonra NHibernate size DB motoru için agnostik olmak (daha karmaşık SQL tüm DB'lerde çalışmayacak) tip-güvenlik (DB nesnelerinin sınıf haritasından güçlü yazarak) gibi avantajlar sağlar. yavaş yüklenme, önbelleğe alma, vb. Kesinlikle gerekli ve kesinlikle DB motorları değiştirmeyecek, NHibernate ile kodda kodlanmış SQL kullanmayın emin olacağım. –
Sabit kodlanmış SQL, hiçbir şeyden daha iyidir, korkarım. Daha fazla araştırmak için Kriterlerin doğru sırada olmaları gerekmez ve ExpressionSQL'i kullanabilmem gerekir. Sorgu, her alt gruptaki ilk öğeyi almak için ROW_NUMBER bölümünü bölümün üzerinde kullanan belirli SQL bitine inmiştir. Sayfalamadan önce gerekli olan. – zeristor
Bu forumda size yardımcı olabilecek deneyimli bir ekip var: http://sqlserver.ro, orada deneyin –