私がする必要があるのは、抽象ページ クラスのサブクラスを自動マップすることです。(初期化段階で) ランタイムを取得するアセンブリのリストでそれらを見つける必要があります。マッピングのアセンブリからアセンブリへの参照がありません。
私のページクラスは次のようになります。
public abstract class Page : EntityBase
{
public virtual int Id { get; protected set; }
public virtual Page Page { get; set; }
//Other properties
}
私のマッピングは次のようになります。
var persistenceModel = new AutoPersistenceModel();
_assemblies.ForEach(x => persistenceModel.AddEntityAssembly(x));
persistenceModel.Setup(x =>
{
x.SubclassStrategy = y => SubclassStrategy.Subclass;
x.DiscriminatorColumn = y => "Type";
})
.IncludeBase(typeof(Page))
.OverrideAll(x => x.IgnoreProperties(y => typeof(Page)
.IsAssignableFrom(y.ReflectedType) && y.ReflectedType != typeof(Page)))
.Where(y => typeof(EntityBase).IsAssignableFrom(y));
_assemblies は、マッピング可能なエンティティを検索するためのアセンブリのリストです。これには、ページ クラスのアセンブリと、基本アセンブリ (ページ クラスを持つアセンブリ) への参照を持つ 1 つ以上の他のアセンブリが含まれます。
ページ クラスから継承するクラスをページ クラスと同じアセンブリに追加すると、すべて正常に動作し、適切にマップされます。しかし、実行時にロードされる他のアセンブリの 1 つに 1 つを追加すると、問題が発生します。次のエラーが表示されます。
「すでに追加されている場合に、多対 1 の「ページ」を追加しようとしました。」
クラスを見つけますが、何らかの理由でそれをページまたは何かとしてマップしようとします。しかし、ページ クラスは既にマップされているため、そのエラーが発生します。それは私の推測です。これを何らかの方法で回避できるかどうかは誰にもわかりませんか?または解決策を知っていますか?