在以往的開發過程當中,我會經常選擇EF框架作為底層數據結構,EF為我們提供了很好的ado.net數據訪問機制,他覆蓋了數據鏈接,linq等多方面內容,而且當我們使用數據庫優先或者code first的時候都體現出明顯的優勢。
- 一鍵生成實體,免除手寫model的煩惱。
- 實時更新數據結構,使數據庫與model保持高度一致。
- 提供多種底層數據的訪問方法。
- 優雅的語法,對於我這種喜愛偷懶的程序猿是一大福音。
然而entity framework在vs中生成的.edmx文件,會導致摘要(說明)為空的bug,具體bug信息為“沒有元數據文檔可用。”,導致我們表名打點去字段時,無法預知字段代表的含義,這在開發當中也是比較致命的,因為開發人員只能靠經驗和推測判斷,表、字段的含義,而不能直觀的第一時間知道他們的用途,給開發帶來了很多的不便。
網絡上面有一個解決方法如下:
http://www.cnblogs.com/stone_w/archive/2012/10/25/2738345.html
不過我試了下沒解決太麻煩了 而且一旦EF要重新生成又的重新弄。
后來我查詢 了一下資料,可以運用T4模板來解決這個問題。
廢話不啰嗦,開始:
首先我們先下載一個文件GetSummery,這里我提供了,大家可以直接下載: 下載
我們在數據庫建立一個表,並給表中字段添加說明,如圖所示:
然后,我們創建一個解決方案,選擇類庫
繼續,添加實體數據模型,具體步驟我就不演示了,大家設置好數據庫,直接生成就可以了。
現在我們來看一下所生成的實體,大家可以看到並沒有什么字段注釋說明:
接來下就把我們下載下來的文件解壓,將解壓出來的文件放入解決方案中,如圖所示:
接下來,我們修改下app.config,操作很簡單,添加一個連接字符串:
|
1
2
|
<add name="MyConn" connectionString="data source=.;initial catalog=db;user id=sa;password=xxx;" providerName="System.Data.SqlClient" />
<!-- 具體連接與EF的連接保持一致-->
|
然后我們修改model.tt,在頂部位置加入代碼:
|
1
|
<#@ include file="GetSummery.ttinclude"#>
|
加入的位置如圖:
緊接着在模板中查找代碼片段<#=codeStringGenerator.UsingDirectives(inHeader: false)#>的位置,在代碼下插入:
|
1
2
3
|
/// <summary>
/// <#= getTableSummery(code.Escape(entity)) #>
/// </summary>
|
繼續查找代碼片段:<#=codeStringGenerator.Property(edmProperty)#>的位置,在代碼上方插入:
|
1
2
3
|
/// <summary>
/// <#= getColumnSummery(code.Escape(entity),code.Escape(edmProperty)) #>
/// </summary>
|
注意:前面的注釋符號///不能少
這里放出一個我的截圖,方便大家對照行號,確定大概位置:
到這里,就基本上完成了,去刷新一下你的實體模型edmx文件,你會發現字段的注釋都自動加上去了。
本文轉載至:http://jeffblog.sinaapp.com/archives/501








