我正在尝试修改POCO T4模板,以在数据库中包含与每个属性对应的列的名称。由于遗留的原因,我们的数据库表是8.3,我们的列最多10个字符,所以事情往往会被取消。能够快速查找给定属性对应的列将是一个很大的帮助。
鉴于此,我不知道如何去做。我对编辑T4模板的想法很满意,我只是不知道如何从EdmProperty对象中检索列名。
有人能指出我正确的方向吗?
答案 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";
}
}
我希望这会有所帮助。