NHibernate - प्रोफाइलर

इस अध्याय में, हम यह समझेंगे कि डेटाबेस के सभी रिकॉर्ड कैसे हैं retrieved, updated, created, and deleted और वास्तव में ये प्रश्न कैसे किए जाते हैं?

इन सभी को समझने के लिए, हम बस अपने कॉन्फ़िगरेशन में एक विकल्प जोड़ सकते हैं, जो कंसोल में SQL को लॉग करता है। यहाँ सरल कथन है जो SQL क्वेरी को लॉग करेगा -

x.LogSqlInConsole = true;

अब, हमारे पास NHibernateDemoDB डेटाबेस में हमारी छात्र तालिका में दो रिकॉर्ड हैं। चलो डेटाबेस से सभी रिकॉर्ड प्राप्त करते हैं जैसा कि निम्नलिखित कोड में दिखाया गया है।

using NHibernate.Cfg; 
using NHibernate.Dialect; 
using NHibernate.Driver; 

using System; 
using System.Linq; 
using System.Reflection;

namespace NHibernateDemoApp { 

   class Program { 
      
      static void Main(string[] args) { 
         var cfg = new Configuration();
			
         String Data Source = asia13797\\sqlexpress;
         String Initial Catalog = NHibernateDemoDB;
         String Integrated Security = True;
         String Connect Timeout = 15;
         String Encrypt = False;
         String TrustServerCertificate = False;
         String ApplicationIntent = ReadWrite;
         String MultiSubnetFailover = False;			
         
         cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source + 
            Initial Catalog + Integrated Security + Connect Timeout + Encrypt +
            TrustServerCertificate + ApplicationIntent + MultiSubnetFailover"; 
            
            x.Driver<SqlClientDriver>(); 
            x.Dialect<MsSql2008Dialect>(); 
            x.LogSqlInConsole = true; 
         }); 
      
         cfg.AddAssembly(Assembly.GetExecutingAssembly()); 
         var sefact = cfg.BuildSessionFactory();
      
         using (var session = sefact.OpenSession()) { 
         
            using (var tx = session.BeginTransaction()) { 
               Console.WriteLine("\nFetch the complete list again\n");
               var students = session.CreateCriteria<Student>().List<Student>(); 
      
               foreach (var student in students) { 
                  Console.WriteLine("{0} \t{1} \t{2}", student.ID, student.FirstMidName,
                     student.LastName); 
               } 
               
               tx.Commit(); 
            } 
				
            Console.ReadLine(); 
         } 
      } 
   } 
}

तो चलिए आगे बढ़ते हैं और इस एप्लिकेशन को फिर से चलाते हैं, और आपको निम्न आउटपुट दिखाई देंगे -

NHibernate: SELECT this_.ID as ID0_0_, this_.LastName as LastName0_0_,
   this_.FirstMidName as FirstMid3_0_0_ FROM Student this_

Fetch the complete list again

3 Allan Bommer
4 Jerry Lewis

जैसा कि आप देख सकते हैं, select clauseडेटाबेस को भेजा जा रहा है, यह वास्तव में क्लॉज की तरह है जो आईडी, फर्स्टमीडनेम और लास्टनाम को पुनः प्राप्त करेगा। तो यह सब डेटाबेस को भेजा जा रहा है और आपके सर्वर पर वापस लाए गए बहुत सारे रिकॉर्ड होने के बजाय संसाधित किया गया है और सर्वर साइड पर संसाधित किया गया है।

NHibernate Profiler

इन परिणामों को देखने का एक और तरीका है NHibernate Profiler का उपयोग करना। NHibernate Profiler एक वाणिज्यिक उपकरण है, लेकिन क्या यह NHibernate अनुप्रयोगों के साथ काम करने के लिए बहुत उपयोगी है। आप आसानी से NuGet से अपने आवेदन में NHibernate Profiler स्थापित कर सकते हैं।

चलो NuGet पैकेज मैनेजर → पैकेज मैनेजर कंसोल का चयन करके टूल मेनू से NuGet Manager कंसोल पर जाएं। यह पैकेज मैनेजर कंसोल विंडो को खोलेगा। निम्नलिखित कमांड दर्ज करें और एंटर दबाएं।

PM> install-package NHibernateProfiler

यह NHibernate Profiler के लिए सभी आवश्यक बायनेरिज़ स्थापित करेगा, एक बार यह सफलतापूर्वक स्थापित हो जाने के बाद आपको निम्न संदेश दिखाई देगा।

आप यह भी देखेंगे कि NHibernate Profiler लॉन्च हो गया है, एक बार यह स्थापित हो गया। इसे उपयोग करने के लिए लाइसेंस की आवश्यकता होगी, लेकिन डेमो उद्देश्यों के लिए, हम NHibernate Profiler के 30-दिवसीय परीक्षण संस्करण का उपयोग कर सकते हैं।

अब, NHibernate Profiler वेब अनुप्रयोगों के साथ काम करने के लिए अनुकूलित है और आप देखेंगे कि इसे जोड़ दिया है App_Start folderसमाधान एक्सप्लोरर में। इन सभी को सरल रखने के लिए, App_Start फ़ोल्डर को हटाएं और आप यह भी देखेंगे कि प्रोग्राम क्लास में मुख्य विधि के प्रारंभ में एक स्टेटमेंट जोड़ा गया है।

App_Start.NHibernateProfilerBootstrapper.PreStart();

इस कथन को भी निकालें और केवल एक साधारण कॉल जोड़ें NHibernateProfiler.Initialize जैसा कि निम्नलिखित कोड में दिखाया गया है।

using HibernatingRhinos.Profiler.Appender.NHibernate; 
using NHibernate.Cfg; 
using NHibernate.Dialect; 
using NHibernate.Driver; 

using System; 
using System.Linq; 
using System.Reflection;

namespace NHibernateDemoApp { 
   
   class Program { 
	
      static void Main(string[] args) { 
		
         NHibernateProfiler.Initialize(); 
         var cfg = new Configuration();
			
         String Data Source = asia13797\\sqlexpress;
         String Initial Catalog = NHibernateDemoDB;
         String Integrated Security = True;
         String Connect Timeout = 15;
         String Encrypt = False;
         String TrustServerCertificate = False;
         String ApplicationIntent = ReadWrite;
         String MultiSubnetFailover = False;			
         
         cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source + 
            Initial Catalog + Integrated Security + Connect Timeout + Encrypt +
            TrustServerCertificate + ApplicationIntent + MultiSubnetFailover";
				
            x.Driver<SqlClientDriver>(); 
            x.Dialect<MsSql2008Dialect>(); 
            x.LogSqlInConsole = true; 
         }); 

         cfg.AddAssembly(Assembly.GetExecutingAssembly()); 
         var sefact = cfg.BuildSessionFactory(); 
         
         using (var session = sefact.OpenSession()) { 
            
            using (var tx = session.BeginTransaction()){ 
               var students = session.CreateCriteria<Student>().List<Student>(); 
               Console.WriteLine("\nFetch the complete list again\n");
               
               foreach (var student in students) { 
                  Console.WriteLine("{0} \t{1} \t{2}", student.ID, student.FirstMidName,
                     student.LastName); 
               } 
					
               tx.Commit(); 
            } 
				
            Console.ReadLine(); 
         } 
      } 
   
   }
}

अब जब आप एप्लिकेशन चलाते हैं, तो वह NHibernate Profiler एप्लिकेशन को डेटा भेजने वाला है।

आप यहां देख सकते हैं, हमें एक अच्छा प्रदर्शन मिला है जो दिखाता है कि हमने लेन-देन शुरू कर दिया है, SQL डेटाबेस में एक अच्छे प्रारूप में क्या कर रहा है।

तो यह निर्धारित करने के लिए बहुत उपयोगी है कि आपके NHibernate एप्लिकेशन के अंदर वास्तव में क्या हो रहा है। एप्लिकेशन के जटिलता के एक निश्चित स्तर पर पहुंचने के बाद यह अविश्वसनीय रूप से उपयोगी हो जाता है, जहां आपको SQL Profiler की तरह कुछ और चाहिए, लेकिन NHibernate के ज्ञान के साथ।