我正在維護一個用C#編寫的內部ORM,它目前沒有任何熱切加載機制。爲了提高性能,我們決定需要加載,所以我們需要編寫自己的代碼來支持它。 (我的同事和我沒有任何ORM工具的經驗,而且,由於一些遺留原因,我們不允許使用流行的工具,如LinqtoSQL,Entity Framework或Nhibernate。)需要關於編寫我自己的急切加載算法的建議
我的問題是,這是生成急切加載SQL語句的最佳實踐嗎?我已經想過這個問題,並提出了兩種方法 -
假設4桌一個典型的例子 - 一個CustomerCategory有許多客戶 一個客戶有很多訂單 一個訂單有許多的OrderDetail
,並假設我想要從所有4個表中急切加載數據,並且我的條件是 - 其中Order.OrderDate'2008-05-05'和'2008-12-31'之間
方法1 - 我生成一個sql以獲取來自所有4個表的數據,全部使用內部連接,以便每個表的主鍵的每個唯一組合都有一行。我會將我的Where條件應用於此SQL。
方法2 - 我生成一個SQL來首先獲取訂單數據,並將此Where條件應用於此SQL,因爲Order.OrderDate來自Order表。 然後,根據我的查詢結果,我將知道所需的所有訂單ID值,因此我將使用它們來檢索訂單明細數據。我也會知道我需要的所有唯一的Customer ID值,所以我也將使用這些值來從客戶表中檢索數據,最後我會爲CustomerCategory執行相同的操作。這個方法總共需要4個SQL語句。
我可以看到第一種方法更有效率,但是我的一位同事指出第二種方法儘管使用4個SQL語句,但它更容易編寫和維護,我同意這一點。
對此的任何想法將不勝感激。 謝謝!
感謝您的幫助。 我承認我們的模型確實有問題。 我們會研究它,並會根據您的建議看看nhibernate 。 – janem 2009-06-01 15:42:28