繁体   English   中英

如何通过编辑T4 .tt模板自动向具有特定属性(列名称)的EF数据库首先生成的实体添加接口

[英]How do I automatically add interfaces to EF database first generated entities that have specific properties (column names) by editing T4 .tt templates

我有大约50个数据库,每个数据库都有150个表,并且正在研究一种允许查询具有特定列的表的搜索机制。 大多数数据库结构都是相同的,因此想法是生成EF实体,如果要从中生成的表具有特定的列,则将接口置于生成的实体后面,以便稍后在该列上进行查询。

模型可能会不断变化,所以我不能在表上手动添加接口-这是T4模板中提供的。

我正在寻找一种机制,该机制允许我根据从中生成表的列名在实体上添加接口

.tt文件中,按以下方式修改EntityClassOpening方法。

stringsToMatch字典key是表上的列名, value是要放在生成的实体上的接口。

public string EntityClassOpening(EntityType entity)
{
    var stringsToMatch = new Dictionary<string,string> { { "POLICY_NO", "IPolicyNumber" }, { "UNIQUE_ID", "IUniqueId" } };
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1}partial class {2}{3}{4}",
        Accessibility.ForType(entity),
        _code.SpaceAfter(_code.AbstractOption(entity)),
        _code.Escape(entity),
        _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
        stringsToMatch.Any(o => entity.Properties.Any(n => n.Name == o.Key)) ? " : " + string.Join(", ", stringsToMatch.Join(entity.Properties, l => l.Key, r => r.Name, (l,r) =>  l.Value)) : string.Empty);
}

希望这可以节省您一些时间。

暂无
暂无

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

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