我們在用EF從數據庫生成模型的時候,默認實體類是沒有注釋的,但是我們已經在數據庫字段添加說明了,能不能自動把注釋也拿過來?
答案是:能。
那么我們開始
首先隨便開一個ASP.NET MVC項目,我們添加ADO實體數據模型。添加完成后我們打開userinfo.cs(這里我的模型名稱為userinfo)如圖:
雙擊打開后發現現在是沒有注釋的。
然后下載此文件:GetSummery.ttinclude (https://pan.baidu.com/s/1vmQ3VrHfEAbntXP3TJhzhQ 提取碼: oft9)
嗯,現在下載完文件后把他解壓后copy到和Model1.edmx同一目錄下,如圖:
現在,在數據庫表字段添加說明或者表說明(表說明映射到EF中就是類的注釋),添加表說明代碼如下:
1 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'注釋的描述' ,@level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'要注釋的表名'
現在我們打開GetSummery.ttinclude文件
找到 string ConnectionStringName = "MyConn"
這是數據庫連接名,在這里我改為string ConnectionStringName = "ConnStr"
然后在根目錄下web.config文件<connectionStrings>節點下配置數據庫連接(這個連接是GetSummery.ttinclude的數據庫連接,並不是你自己的連接字符串,所以不要省略)
1 <add name="ConnStr" connectionString="server=.;uid=sa;pwd=數據庫密碼;database=userinfo" providerName="Syste4m.Data.SqlClient"></add>
配置后,關閉GetSummery.ttinclude。
打開Model1.tt。
在Model1.tt 上方添加 <#@ include file="GetSummery.ttinclude" #>,如圖:
繼續,找到<#=codeStringGenerator.EntityClassOpening(entity)#> 在它上方添加
/// <summary>
/// <#= getTableSummery(code.Escape(entity)) #>
/// </summary>
如圖:
繼續,找到<#=codeStringGenerator.Property(edmProperty)#> 在它上方添加
/// <summary>
/// <#= getColumnSummery(code.Escape(entity),code.Escape(edmProperty)) #>
/// </summary>
如圖:
到此,我們ctrl+s 保存。然后打開我們的實體類 userinfo.cs 發現我們在數據庫加的說明已經自動注釋上去了。如圖:
如果我們在數據庫更新了我們的注釋說明,那么我們,在打開Moedl1.tt 文件,然后在ctrl+s保存一下類就更新了。
謝謝!好了,該睡覺了。
23:23:16