如何通过编辑 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);
}
希望这能为您节省一些时间。
我有大约 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);
}
希望这能为您节省一些时间。