实体框架和数据库列名称

时间:2012-08-13 00:59:21

标签: c# entity-framework poco

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

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

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我不会说这是解决这个问题的最好方法,但这就是我做到的。我需要能够以明文检索列名称以绑定到BoundField asp控件,并且没有将其烘焙到EF模板中。

所以,我添加了一些代码,只是加载了简单的属性",即:列名,允许我这样做。它为"表"添加了一个结构。对象名为" ColumnNames"并将列名称公开为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";
    }
}

我希望这会有所帮助。