文本转换和查找实体复数(集合)

Ric*_*ard 13 css t4 entity-framework entity-framework-4

如果我有.tt模板,我可以使用entity.Name来写出实体的名称,例如:

foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{;
    WriteLine(entity.Name); 
}
Run Code Online (Sandbox Code Playgroud)

使用正常转换或T4,如何写出实体集的实际名称?(例如,对于Person,它可能是人物 - 但也许我将其更改为设计师中的People,所以我想要那样做).

谢谢!

理查德

小智 15

我正在寻找同一个问题的答案,发现它并不太糟糕.但是,不是获取EntitySet名称,而是使用相同的复数形式非常容易.

在您的文本模板中,可能位于顶部,添加以下行:

<#@ assembly name="System.Data.Entity.Design" #>
<#@import namespace="System.Data.Entity.Design.PluralizationServices" #>
Run Code Online (Sandbox Code Playgroud)

这允许您创建一个多元化器实例:

<# PluralizationService pluralizer = PluralizationService.CreateService(System.Globalization.CultureInfo.CurrentCulture); #>
Run Code Online (Sandbox Code Playgroud)

然后在模板中复数一个实体,只需使用:

<#=pluralizer.Pluralize(code.Escape(entity))#>
Run Code Online (Sandbox Code Playgroud)

当然,您可以code.Escape(entity)使用存储实体名称的变量名称替换.

就是这样!

来源:
在t4模板中可以导入哪些库有任何限制吗? http://vthornheart.railsplayground.net/blog/archives/655

  • 我没有调查这是否是一个问题(这听起来很合乎逻辑,因此很可能是这样)但是我不认为将失败归咎于你的答案是完全有建设性的(嗯,在我看来这是粗鲁的,但其他人可能不同意).在SO精神中,为什么不提出解决方案呢?这样我们都学到了一些有趣的东西? (2认同)

小智 5

从"CreateEdmItemCollection"方法获取"ItemCollection"后,获取默认的Entity Container,您可以从中获取EntitySet名称...

EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
EntityContainer container = ItemCollection.GetItems<EntityContainer>().FirstOrDefault();

foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
    EntitySetBase entitySet = container.BaseEntitySets.FirstOrDefault(set => set.ElementType == entity);

     string pluralizedName = entitySet.Name; //<--- Pluralized Name extracted
}
Run Code Online (Sandbox Code Playgroud)