如何通过编辑 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 个 table,并且正在研究一种搜索机制,该机制允许查询具有特定列的 table。大多数数据库结构都是相同的,所以我的想法是生成 EF 实体并将接口放在生成的实体后面,如果 table 生成实体的实体具有特定的列,这样我以后就可以在该列上查询。

模型可能会不断变化,所以我无法在 tables 上手动添加接口 - 这里有 T4 模板。

我正在寻找允许我根据 table 上的列名称在实体上添加接口的机制,它们是从

生成的

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

stringsToMatch 字典 key 是 table 上的列名称,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);
}

希望这能为您节省一些时间。