5

我正在尝试修改 POCO T4 模板以包含数据库中与每个属性对应的列的名称。由于遗留原因,我们的数据库表是 8.3,我们的列最多 10 个字符,所以事情往往会被缩写。能够快速查找给定属性对应的列将是一个很大的帮助。

鉴于此,我不知道如何去做。我对编辑 T4 模板的想法很满意,只是不知道如何从 EdmProperty 对象中检索列名。

谁能指出我正确的方向?

4

2 回答 2

1

我已经在其他答案中讨论过这个问题,但我找不到它知道。问题是要获取此信息,您需要浏览映射的 MSL 部分 - 列映射到属性的部分。不幸的是,用于 MSL 元数据项的整个 API 是内部的(我认为未来 EF 版本的一个目标是使其公开)。当您拥有用于类生成的 T4 模板时,您通常使用 CSDL - 即实体描述,它仅包含您在 EDMX 图表和实体属性窗口中看到的信息。

于 2012-08-13T08:40:19.527 回答
0

我不会说这是解决这个问题的最好方法,但我就是这样做的。我需要能够以纯文本形式检索列名以绑定到 BoundField asp 控件,而这并未融入 EF 模板中。

所以,我添加了这段代码,它只加载“简单属性”,即:列名,以允许我这样做。它向名为“ColumnNames”的“table”对象添加了一个结构,并将列名公开为 const 字符串。

<#
    if (simpleProperties.Any())
    {
#>
    public struct ColumnName 
    {
  <# 
      foreach (var simpleProperty in simpleProperties)
      {
  #>
      public const string <#= simpleProperty #> = "<#= simpleProperty #>";
  <# 
      }
  #>
  }
<#  }
#>
}

我将它放在 T4 模板中的这段代码之前,该模板在解决方案中的 edmx 文件下生成单个文件:

<#
    EndNamespace(code);
}

这将创建如下所示的代码:

public partial class JobPosting
{
    public int PositionRowId { get; set; }
    public System.Guid PositionRelatedGuid { get; set; }

    public struct ColumnName 
    {
        public const string PositionRowId = "PositionRowId";
        public const string PositionRelatedGuid = "PositionRelatedGuid";
    }
}

我希望这有帮助。

于 2014-06-17T16:23:35.953 回答