引言
在做图书馆项目的时候我们采用了EF实体架构自动生成实体,但是遇到一个很大的问题就是在生成的实体中没有注释,我们都知道实体没有注释是非常痛苦的一件事情对于开发的人来说,因为我们不能很快速的了解到底我们需要对那个属性进行操作,所以我就在研究应该如何给生成的实体添加注释,下面给大家分享一下我的经验:
第一 手动添加(无效)
当开发人员告诉我让我给实体添加注释的时候,我就什么都没有多想,开始给我生成的实体手动添加注释,当我们把我的15个实体的每一个字段都添加了以后,发现我的一个数据库的字段的类型写错了,需要修改一下数据库,修改好数据库以后就开始从数据库生成实体模型,然后我就哭了,因为我花费了将近半个小时写的注释都没有了,这才意识到不不能通过手动添加,这样是非常徒劳的
第二 修改实体模型(正在用)
然后就在网上继续查找资料,最后了解到可以通过修改实体模型里面的tt模板来自动添加实体的属性,下面就给大家分享一下这个操作过程: 1、给实体模型添加摘要
2、给实体中的属性添加摘要方法同上
3、修改t4模板,添加了类头注释双击xxx.tt文件后,找到下面代码:
将上面的代码用下面的代码代替:
string summary=string.Empty; foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection)) { fileManager.StartNewFile(entity.Name + ".cs"); BeginNamespace(code); if(entity.Documentation !=null && entity.Documentation.Summary!=null) summary=entity.Documentation.Summary; else summary=entity.Name; #> <#=codeStringGenerator.UsingDirectives(inHeader: false)#> /// <summary> /// <#=summary#> /// </summary> <#=codeStringGenerator.EntityClassOpening(entity)#>
4、修改t4模板,添加属性的注释
将上面的代码用下面的代码代替
foreach (var edmProperty in simpleProperties) { if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null) { summary=edmProperty.Documentation.Summary; } else { summary=""; } #> /// <summary> /// <#=summary#> /// </summary> <#=codeStringGenerator.Property(edmProperty)#>
5 修改t4模板,添加导航属性
将上面的代码用下面代码代替:
<# foreach (var navigationProperty innavigationProperties) { if(navigationProperty.Documentation != null &&navigationProperty.Documentation.Summary != null) { summary=navigationProperty.Documentation.Summary; } else { summary=""; } #> /// <summary> /// <#=summary#> /// </summary> <#=codeStringGenerator.NavigationProperty(navigationProperty)#> <#
5、预览效果
第三 将数据库中的注释直接生成实体注释(正在研究)
我们会发现虽然在第二种方法的时候,我们也已经完成了对实体的注释的添加,但是我们得首先修改实体模型的中的属性,我们可以利用和数据库的关系直接将数据库中的说明直接添加到实体中,这种方法是比较难实现的,因为开发时间的原因没有深入的研究,但是在以后的学习中一定会研究这个东西,到时候在给大家分享。
小结
我们在学习的过过程中会发现很多值得我们学习和研究的东西,每一个难题都会有解决办法的,而在查询和尝试的过程中就是我们收获知识的时刻,所以我们在学习的时候不能存有“将就”的心态,如果广大读者有更好的解决办法,欢迎留言交流。