繁体   English   中英

实体框架和数据库列名称

[英]Entity Framework and database column names

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

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

谁能指出我正确的方向?

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

我不会说这是解决这个问题的最佳方法,但这就是我做到的。 我需要能够以纯文本检索列名称以绑定到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";
    }
}

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM