我需要做的是自动映射我的抽象页面类的子类。我需要在我获得运行时的程序集列表中找到它们(在初始化阶段)。我的映射程序集中没有任何对程序集的引用。
我的页面类看起来像这样:
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 是要在其中搜索可映射实体的程序集列表。它包含我的页面类的程序集以及一个或多个其他程序集,这些程序集都引用了基本程序集(具有我的页面类的程序集)。
当我将一个从我的页面类继承的类添加到与我的页面类相同的程序集时,一切正常并且它的映射正确。但是,如果我将一个添加到在运行时加载的其他程序集之一,我会遇到问题。我收到此错误:
“已添加时尝试添加多对一的‘页面’。”
它找到了类,但由于某种原因试图将其映射为 Page 或其他东西。但是页面类已经被映射,所以我得到了那个错误。这是我的猜测。有谁知道我是否可以以任何方式解决这个问题?或者知道解决办法吗?