Свободные подклассы nhibernate automap из разных сборок - PullRequest
2 голосов
/ 16 января 2010

Что мне нужно сделать, так это подклассы autop моего абстрактного класса страниц. Мне нужно найти их в списке сборок, которые я получаю во время выполнения (на этапе инициализации). У меня нет никаких ссылок на сборки из сборки моих сопоставлений.

Класс моей страницы выглядит примерно так:

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 или что-то в этом роде. Но класс страницы уже сопоставлен, поэтому я получаю эту ошибку. Это мое предположение. Кто-нибудь знает, могу ли я обойти это каким-либо образом? Или знаете решение?

1 Ответ

1 голос
/ 08 февраля 2010

Я только что нашел эту ссылку. Похоже, это пока невозможно.

Редактировать

Это исправлено в последнем выпуске fluent nhibernate.

...