綜合應用WPF/WCF/WF/LINQ之二十九:代碼生成器之DBMLToCode

 SqlMetal.exe這個程序自動生成的DataContext類有很多問題,導致我們不能直接使用,所以我們有必要先生成DBML文件,並做一些修改,然後再生成DataContext類。
  我們需要修改的有如下幾種情況:
  1、我們有自定義的Info類,但存儲過程又會生成新的Info類,我們需要一一更改爲自己的Info類,並刪除自動生成的Info類。
  2、我們有自定義的枚舉,我們需要在涉及到這些枚舉類型的地方一一修改爲自定義的枚舉類型。
  3、當存儲過程中使用了sp_executesql語句時,SqlMetal.exe程序會認爲返回的不是一個結果集,而是一個Int,這時我們需要修改它的返回類型。
  本系統的考慮的情況比較簡單,該代碼生成器假定關於這個Table的所有返回類型都是一樣的,形如TableNameInfo。
  這樣一來,我們需要配置的,就只有枚舉了。其它的幾種情況我們可以用程序處理:判斷Interface的返回類型,如果是Info或者IList,就將DBML中該存儲過程的返回類型改成自定義的Info類名。
  枚舉的配置如下:

    1 <?xml version="1.0" encoding="utf-8" ?>
    2 <root>
    3     <tables>
    4         <item name="Employee" field="EmployeeStatus" value="EmployeeStatusEnum" />
    5     </tables>
    6     <procedures>
    7         <item name="InsertEmployee" field="EmployeeStatus" value="EmployeeStatusEnum" />
    8         <item name="UpdateEmployeeByEmployeeId" field="EmployeeStatus" value="EmployeeStatusEnum" />
    9         <item name="GetEmployeesByFilter" field="EmployeeStatus" value="EmployeeStatusEnum" />
   10     </procedures>
   11 </root>
  具體代碼則相對比較簡單,請參考源代碼。
  值得注意的是,生成過程中,會在程序中調用SqlMetal.exe程序,將DBML文件轉爲DataContext類,刪除無用的自動生成的Info類,必須要等該DataContext類生成之後才能進行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章