我正在从现有的 pgsql 数据库生成 POCO。
我想将生成的 POCO 放入自己的 C# 类库和 DbContext 并映射到不同的项目中,这样我的 POCO 就不会引用任何与 EF 相关的内容。
我正在尝试修改 Context.tt 模板以在 OnModelCreating() 期间在运行时指定表架构,因为在生成的实体上使用 [Table] 属性会引入到 EF 库的硬链接。
我的问题是我目前无法从当前的 EnitySet 中检索架构名称。这是我到目前为止所做的摘录:
var efHost = (EfTextTemplateHost)Host;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
<#
foreach (var set in efHost.EntityContainer.BaseEntitySets.OfType<EntitySet>())
{
#>
modelBuilder.Configurations.Add(new <#= set.ElementType.Name #>Map());
modelBuilder.Entity<<#= set.ElementType.Name #>>().ToTable("<#= set.Name #>", "<#=????#>");
<#
}
#>
}
此时唯一可用的对象是EfTextTemplateHost的一个实例。
任何帮助表示赞赏。
TIA。
编辑:我找到了检索模式的方法(set.MetadataProperties["Schema"].Value ?? ""),但该值始终为 null !这可能意味着逆向工程代码优先工具不会将值提供给模板主机。我可能会结束解析 edmx 文件。未完待续。