Entity Framework機制很方便的使用表和視圖,但是針對一些複雜的業務邏輯,他就有點處理性能低下了。
下面是在項目中使用到Oracle 存儲過程調用的步驟:開發平臺VS2012+Oracle11g。
目前的報表開發流程統一如下,
1. 定義好存儲過程和他指針輸出以來的視圖對象。
完成包含報表邏輯的視圖或者存儲過程,測試沒有問題,輸出的列名和類型完全符合需求上的定義。
2. 創建一張存儲過程對於數據集的報表,主要用來存儲用來做報表功能模塊的數據集,數據庫定期處理,導入當天處理完成的數據到報表數據表。
從視圖 或者存儲過程中將結果集導入到新表中,並建立主鍵,觸發器,lastmodified,以及將查詢條件中所用到的所有字段,加上索引。
3. 使用自己編寫的XMLReplace類庫對Entity Framework生產的模板類的所有實體類進行替換處理,已經動態添加存儲過程對應的Function。
使用上在代碼成,將Oracle 存儲過程添加到Entity Framework機制下的 函數功能。
注意:這裏添加的Function必須與Oracle Procedure 擁有相當的輸入和輸出參數,以及參數對於的類型。
這個XMLReplace功能實際上還有處理類名的作用:如在Oracle中TBL_CLAIM表,進行Replace處理之後,在代碼中生成CLAIM 實體類。另外Entity Framework會生成實體類對於的所有外鍵實體類的對應關係。如TBL_STUDENT有FK_CLASS_ID,除了擁有CLASS_ID這個字段,將還會擁有CLASS實體對象的屬性。
4. 建TBL_report_對應的specification文件,其泛型參數類型就是新表的類型。
備註:specification文件,時間上就是Linq查詢的組合文件,就像摸個查詢中拼接所有查詢字段的結果,實際上就是sql where 後面的查詢語句,最後可在Linq調用數據中的解析文件中看到。
5. 綁定到UI。在頁面上調用查詢,生成specification,組裝分頁和排序條件後,返回結果集,傳到頁面的flexgrid。
這裏是採取的Jquery + handle class (ashx.cs)的組合,調用$.ajax方法,success時將返回的數據集綁定到 Jquery flexgrid控件中。
[備註]Jquery flexgrid;Javascript To Json;Ajax+Web service。
[總結]以上是開發流程。具體細節可查網上相關資料。
Entity Framework調用存儲過程之類的。