我接管了一個由已經離開的第三方顧問編寫的項目。Spring.Net HibernateTemplate.Execute澄清
我來自EF backgournd。其中一個DAO類有以下內容,我發現很難讓我的頭腦一步一步詳細解釋正在發生的事情。如果有人能夠幫助我理解這段代碼將非常感謝。
return HibernateTemplate.Execute(
delegate(ISession hbSession) // <<--What is this code actually trying to do?
{
string queryText = "from {0} x where x.Code = :Code";
queryText = string.Format(queryText, typeof(Product));
IQuery query = hbSession.CreateQuery(queryText);
query.SetParameter("Code", productCode);
query.SetCacheable(true);
query.SetCacheRegion(CoreCacheConstants.ProductQueryCacheRegion); // <-- What is this code trying to do.
var fund = query.UniqueResult(); // <-- Is this similar to DISTINCT keyword in LINQ?
if (fund == null)
throw new ArgumentException(String.Format("No product found with productcode: {0}", productCode:));
NHibernateUtil.Initialize(((Product)Product).Details); // <--What is this code trying to do. And where is the execute method for above queries.
return fund;
}
) as Product
基本上,我與委託部分混淆,爲什麼使用委託而不是簡單查詢數據庫。上述方法有什麼好處。
另外我不能看到任何nHibernate的ORM映射XML。 Spring.NET是否需要映射文件以將數據傳遞到數據源?爲了說明ISession如何知道要連接哪個數據庫以及要使用哪個表等
@Marjin,感謝你的幫助。你是如何學習Spring.net的,你會推薦哪本書? Spring.net文檔假設讀者知道回調,委託調用等。我正在尋找101描述。 – 2012-02-11 20:37:08
另外,這個查詢的目的是什麼IQuery query = hbSession.CreateQuery(queryText)。換句話說,爲什麼要放在會話而不是直接查詢數據庫。我無法看到將查詢本身存儲在會話中的優勢。 – 2012-02-11 20:39:07
不幸的是,我不能推薦你一本關於Spring.Net的書。其實,我從文檔,spring.net論壇和源代碼中學到了很多東西。對於Spring框架的一般理解,[Spring in Action](http://www.manning.com/walls3/)是一本很好的書,但它適用於Java的Spring。 – Marijn 2012-02-11 20:46:20