- NHibernate 教程
- NHibernate - 首頁
- NHibernate - 概述
- NHibernate - 架構
- NHibernate - ORM
- NHibernate - 環境設定
- NHibernate - 入門
- NHibernate - 基本 ORM
- NHibernate - 基本 CRUD 操作
- NHibernate - 效能分析器
- 為對映檔案新增智慧感知
- NHibernate - 資料型別對映
- NHibernate - 配置
- NHibernate - 覆蓋配置
- NHibernate - 批處理大小
- NHibernate - 快取
- NHibernate - 對映元件
- NHibernate - 關係
- NHibernate - 集合對映
- NHibernate - 級聯操作
- NHibernate - 延遲載入
- NHibernate - 反向關係
- NHibernate - Load/Get
- NHibernate - LINQ
- NHibernate - 查詢語言
- NHibernate - Criteria 查詢
- NHibernate - QueryOver 查詢
- NHibernate - 原生 SQL
- NHibernate - Fluent Hibernate
- NHibernate 有用資源
- NHibernate - 快速指南
- NHibernate - 有用資源
- NHibernate - 討論
NHibernate - 效能分析器
在本章中,我們將瞭解如何從資料庫中檢索、更新、建立和刪除所有記錄,以及這些查詢是如何執行的?
為了理解所有這些,我們可以在配置中簡單地新增一個選項,該選項將 SQL 記錄到控制檯。以下是可以記錄 SQL 查詢的簡單語句:
x.LogSqlInConsole = true;
現在,我們在 NHibernateDemoDB 資料庫的 student 表中有兩條記錄。讓我們檢索資料庫中的所有記錄,如下面的程式碼所示。
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 子句,它實際上類似於子句,它將檢索 ID、FirstMidName 和 LastName。因此,所有這些都將傳送到資料庫並在那裡進行處理,而不是將大量記錄帶回您的伺服器並在伺服器端進行處理。
NHibernate 效能分析器
檢視這些結果的另一種方法是使用 NHibernate 效能分析器。NHibernate 效能分析器是一個商業工具,但它對於處理 NHibernate 應用程式非常有用。您可以輕鬆地從 NuGet 將 NHibernate 效能分析器安裝到您的應用程式中。
讓我們從“工具”選單中的“NuGet 包管理器”→“程式包管理器控制檯”進入 NuGet 包管理器控制檯。它將開啟“程式包管理器控制檯”視窗。輸入以下命令並按 Enter 鍵。
PM> install-package NHibernateProfiler
它將安裝 NHibernate 效能分析器所需的所有二進位制檔案,一旦成功安裝,您將看到以下訊息。
您還將看到 NHibernate 效能分析器已啟動,一旦安裝完成。它需要許可證才能使用,但出於演示目的,我們可以使用 NHibernate 效能分析器的 30 天試用版。
現在,NHibernate 效能分析器已針對 Web 應用程式進行了最佳化,您將看到它在解決方案資源管理器中添加了App_Start 資料夾。為了使所有這些都保持簡單,請刪除 App_Start 資料夾,並且您還會注意到在 Program 類中的 Main 方法開頭添加了一個語句。
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 效能分析器應用程式。
您可以在此處看到,我們有一個很好的顯示,顯示我們已啟動事務,SQL 在資料庫中以一種很好的格式執行的操作。
因此,這對於確定 NHibernate 應用程式內部到底發生了什麼非常有用。一旦應用程式達到一定的複雜程度,它就會變得非常有用,在這種情況下,您需要類似於 SQL Profiler 的工具,但同時還要了解 NHibernate。