转载-C#:VS之EF框架添加edmx(自动跟踪实体生成器):映射到数据库表和生成代码实体类;并为实体模型添加注释

在上一篇文章添加好EF数据库模型的基础上,为了生成表结构对应的标准类,使用自动跟踪实体生成器,这里主要记录文件命名注意事项

1.双击.edmx文件,在界面的空白处鼠标右击,选中“添加代码生成项”,选择“ADO.NET自跟踪实体生成器”,会生成两个.tt文件

 

2.注意:其中没有包含Context字符串的那个文件命名一定要注意,必须命名为有.edmx后缀的文件名+Entites.tt,比如.edmx为ABC.edmx,则此.tt文件的完整文件名为:ABC.Entities.tt,否则无法生成正确标准类文件

 

3.edmx的属性调整(双击文件打开,单击空白处就可出现):数据库生成工作流改为:Generate Oracle Via T4(TPT).xaml(VS);命名空间必须改为与项目一致或者与edmx所在的文件夹中的.cs文件的命名空间一致;DDL生成模板也要改为:SSDLToOracle(VS);保存时转换相关的文本模板:TRUE;应用延时加载:FALSE;生成时验证:FALSE

 

4.生成之后,必须更改.tt文件的配置格式为标准类格式,这个地方是用代码控制的,也就是说需要双击ABC.Entities.tt,打开文件,将里面的代码修改为可以显示为简单类格式

 

5.这样做的目的在于可以像看到自定义标准类那样看到表结构对应的实体类,在大型项目中会让层次更加清

 

新增映射关系注意事项:

1. 如果要在数据库中添加表后使用,则必须先更新edmx和数据库的映射

1)从数据库更新模型:右击edmx,打开模型浏览器,任意一个映射实体或者顶层edmx上右击后选择“从数据库更新模型”,然后连接(连不上则多连几次,原因可能是安全性验证问题),“新增”中选择表,确定即可

2)修改表格对应实体名:这时从数据库映射过来的实体名称就是原表格名称,需要更改为所需要的实体名:右击项目中的edmx,选择使用XML格式打开(右击打开方式可以看到),搜索数据库的原表名,全部替换为所需要修改的实体名;然后用“模型浏览器”,找到映射实体名,在属性中修改为需要的名称(右击可以看到属性)

3)修改表格字段映射过来的实体属性名:直接映射过来的字段全部是大写的,这里修改为每个单词首字母大写:可以用“模型浏览器”(双击打开的默认方式),找到对应映射实体(此时实体名和表名是一样的,这里也可以在属性中修改实体名),点击下拉字段,点击字段,到属性里面去修改。然后右击edmx,选择“运行自定义工具”,即可生效。如果先以XML形式打开修改了之后,还是得以默认方式打开再次修改,没有这个必要。

4)生效:右击xxx.edmx下面的xxx.Entiies.tt文件(xxx是文件名),选择“运行自定义工具”即可(必须步骤)

注意:1.如果碰到数据库表的字段和映射的实体的属性类型不一致,只能找到对应映射实体,右击选择“属性”,到属性里面去修改,只能在属性中修改字段类型,不可以直接在下面的映射关系里面修改

            2. 如果出现一些表名命名错误,比如BatchSpecialTypeImport写成了BatchSpecialTypeImport1,在edmx里面已经修改正确了还是报错,可能就是没有重新运行xxx.Entities.tt文件的运行自定义工具,导致xxx.Entities.tt的子目录xxx.Context.cs没有正确修改

            3.如果运行了xxx.Entiies.tt自定义工具后属性名还是没有智能提示为小写,则可以先关闭.tt文件,打开其下拉对应的实体类,再关闭,再多运行两次xxx.Entiies.tt就可以了(可能是vs反应没那么快)
---------------------
作者:xushaozhang
来源:CSDN
原文:https://blog.csdn.net/xushaozhang/article/details/54619133
版权声明:本文为博主原创文章,转载请附上博文链接!

==========================================================================================================================

1.在edmx中添加注释
1.1类注释
选中实体,打开属性,找到“文档”选项,在“摘要”位置添加类注释,如下图:
 
1.2属性注释
同类注释,打开属性,找到“文档”选项,在“摘要”位置添加属性注释,如下图:
 

2.修改tt模版
打开Model.tt文件
 
2.1添加类注释
找到图中的位置,对t4模板做如下修改
 
代码复制:
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)#>
2.2添加属性注释
找到图中的位置,对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)#>
3.效果预览
做完以上工作,保存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)#>

<#


---------------------
作者:刘晓春
来源:CSDN
原文:https://blog.csdn.net/Augus3344/article/details/45972955
版权声明:本文为博主原创文章,转载请附上博文链接!

 

注意:文中“/// <summary>”注释处,需要手动添加缩进,

posted on 2019-02-28 10:19  xbj_hyml  阅读(930)  评论(0)    收藏  举报

导航