如果我有.tt模板,我可以使用entity.Name来写出实体的名称,例如:
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{;
WriteLine(entity.Name);
}
使用正常转换或T4,如何写出实体集的实际名称? (例如,对于Person,它可能是人物 - 但也许我将其改为设计师中的People,所以我反而希望这样做。)
谢谢!
理查德
答案 0 :(得分:15)
我一直在寻找同一个问题的答案,并发现它并不太糟糕。但是,不是获取EntitySet名称,而是使用相同的复数形式非常容易。
在文本模板中,可能位于顶部,添加以下行:
<#@ assembly name="System.Data.Entity.Design" #>
<#@import namespace="System.Data.Entity.Design.PluralizationServices" #>
这允许您创建一个多元化器实例:
<# PluralizationService pluralizer = PluralizationService.CreateService(System.Globalization.CultureInfo.CurrentCulture); #>
然后复制模板中的实体,只需使用:
<#=pluralizer.Pluralize(code.Escape(entity))#>
当然,您可以将code.Escape(entity)
替换为存储实体名称的变量名称。
就是这样!
来源:
Are there any limitations on what libraries can be imported in a t4 template?
http://vthornheart.railsplayground.net/blog/archives/655
答案 1 :(得分: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
}
答案 2 :(得分:2)
您可能会发现这些有用:
string GetEntitySetName(string entityName, EntityContainer container)
{
var list = container.BaseEntitySets.OfType<EntitySet>();
var l = list.Where( f=> f.ElementType.Name == entityName);
string setname = l.Select(c=>c.Name).FirstOrDefault();
return setname ?? string.Empty;
}
string GetEntitySetName(System.Data.Metadata.Edm.EdmType entity, EntityContainer container)
{
string name = GetAllBaseClasses(entity).Last();
var out_ = GetEntitySetName(name, container);
return out_;
}
string[] GetAllBaseClasses(System.Data.Metadata.Edm.EdmType entity, int From = 0)
{
List<string> types = new List<string>();
types.Add(entity.Name);
while (entity.BaseType != null)
{
types.Add(entity.BaseType.Name);
entity = entity.BaseType;
}
return types.Skip(From).ToArray();
}