T4模板根據數據庫表和列的Description生成代碼的summary的終極解決方案


相信很多人都用T4模版生成代碼,用T4模版生成標准代碼真的很方便。我們經常根據表生成相關的代碼, 但是估計很多人都遇見過同一個問題, 特別是我們在生成model的時候,代碼中model中的Summary一直無法生成。這個問題也困擾了我很久,也找了很多方案,一直沒有更好的方法。問題如下:

image

解決方案

為了生成summary需要額外的增加一個類,並在T4模版中引用這個類即可。這個類的作用是根據表名和列名提取數據表中列的description。

1. 首先查詢數據庫中所有表和列的基本信息

為了方便起見,我在數據庫中創建了一個視圖,視圖結構如下:

image

 

sql 腳本如下:

SELECT   TOP (100) PERCENT COALESCE (T.name, OBJECT_NAME(C.object_id)) AS TableName, TB.TableDESC,
                C.name AS ColumnName, TYPE_NAME(C.user_type_id) AS DataType, D.definition AS DefaultSetting,
                C.is_nullable AS IsNullable, C.max_length AS MaxLength, COLUMNPROPERTY(C.object_id, C.name, 'PRECISION')
                AS Precision, P.value AS ColumnDESC
FROM      sys.columns AS C LEFT OUTER JOIN
                sys.table_types AS T ON T.type_table_object_id = C.object_id LEFT OUTER JOIN
                sys.default_constraints AS D ON C.object_id = D.parent_object_id AND
                D.parent_column_id = C.column_id LEFT OUTER JOIN
                sys.extended_properties AS P ON (P.major_id = C.object_id OR
                P.major_id = T.user_type_id) AND P.minor_id = C.column_id AND P.name = 'MS_Description' LEFT OUTER JOIN
                    (SELECT   INFORMATION_SCHEMA.TABLES.TABLE_NAME AS TableName, P.value AS TableDESC
                     FROM      INFORMATION_SCHEMA.TABLES LEFT OUTER JOIN
                                     sys.extended_properties AS P ON
                                     OBJECT_ID(INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA + '.' + INFORMATION_SCHEMA.TABLES.TABLE_NAME)
                                      = P.major_id AND P.minor_id = 0
                     WHERE   (INFORMATION_SCHEMA.TABLES.TABLE_TYPE = 'BASE TABLE')) AS TB ON COALESCE (T.name,
                OBJECT_NAME(C.object_id)) = TB.TableName
WHERE   (COALESCE (SCHEMA_NAME(T.schema_id), OBJECT_SCHEMA_NAME(C.object_id)) = 'dbo')
ORDER BY TableName

 

2.在代碼中計算description

Untitled-1

 

3.T4模版調用

前面已經創建了一個類,這個類很簡單,就是根據表名和列名獲取對應的description。現在只要在T4模版中引用這個類即可。代碼中要注意兩點。直接上代碼:

1. 必須要在T4模板的頭部引用上面類的dll,否則無法引用命名空間。我用的是相對路徑。其中$(SolutionDir)表示的solution所在的文件夾。

2.引用命名空間,下圖中紅線部分2行

image

在T4模板中直接調用方法即可,這樣就可以根據表個列表獲取到相應的description作為類的summary了。

 

image

這里提到一點,T4模版的代碼中這個我用了一個replace,是因為我在寫列描述的時候有換行,所以我把數據庫中的換行轉換成了summary中的換行,效果如下:

image

 

生成的代碼的demo

跟大家提供幾個生成代碼的截圖吧,怎么樣所有的summary都已經根據數據庫生成出來了吧

image

 

總結

個人認為這個方法是最簡單的方法也是最有效的了,應該沒有比這個在簡單了。歡迎大家拍磚


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM