既存の pgsql データベースから POCO を生成中です。
生成された POCO を独自の C# クラス ライブラリと DbContext に配置し、別のプロジェクトにマッピングして、POCO が EF 関連のものを参照しないようにしたいと考えています。
生成されたエンティティで [Table] 属性を使用すると、EF ライブラリへのハード リンクが導入されるため、Context.tt テンプレートを変更して、実行時に OnModelCreating() 中にテーブル スキーマを指定しようとしています。
私の問題は、現在の 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のインスタンスです。
どんな助けでも感謝します。
ティア。
編集: スキーマを取得する方法を見つけました (set.MetadataProperties["Schema"].Value ?? "") が、値は常に null です! これは、リバース エンジニアリング Code First ツールがテンプレート ホストに値を与えていないことを意味している可能性があります。edmx ファイルの解析を終了することがあります。つづく。