by Suat TUNCER
31. Ekim 2008 21:05
Çok uzun olmamakla beraber bir süredir proje geliştiriken NHibernate kullanıyorum. Aslında oldukça pratik bir tool. Özellikle nesnelerin rahatlığını size sunduğu için odağınızı neredeyse tamamen uygulama katmanına kaydırıyor, buda daha kaliteli, okunabilir ve yüksek oranda object oriented bir kodun orataya çıkmasını sağlıyor.
Yaşadığım bir kaç sıkıntıyı paylaşmak isterim. Create, Update ve Delete işlemlerinde oldukça hızlı ve sorunsuz çalışmasına rağmen sorgulama özellikle de raporlamada çok ciddi performans sıkıntıları var, tabi burada problem birazda benim raporlama kaynağı olarakta object collectionlar kullanmak istememden kaynaklanıyor.
Tavsiyem sorgulamada HQL veya SQL kullanılmasından yanadır özellikle complex raporlama tarzı sorgularda kesinlikle IQuery interfacesi kullanılmalı ICriteria değil. Benim tercihim HQL hernekadar SQL tarzı sıkıcı sorgular yazmak zorunda kalsamda nesne sorguladığım için daha keyifli ve kullanışlı. Gönül isterdiki LINQ ile NHibnernate kardeş kardeş çalışsın mamhif henüz mümkün değil.
// Sorgu Cümlesi hazırlanıyor, SQL cümlesi gibi düşünülebilir
// farkı tablolar herine tipler var
StringBuilder hql = new StringBuilder();
hql.Append("from HighCode.Domain.Content as content ");
hql.Append("where content.ContentType=:type");
// hql cümlesi kullanılarak bir IQuery nesnesi oluşturulur
IQuery query = _session.CreateQuery(hql.ToString());
// parametre eklenir
query.SetParameter("type", ContentType.Article);
// sorgu çalıştırılır
IList<Content> result = query.List<Content>();