Классы nHibernate, Automapping и Chained Abstract - PullRequest
2 голосов
/ 03 апреля 2010

У меня возникли некоторые проблемы с использованием nHibernate, автоподстановкой и структурой классов с использованием нескольких цепочек абстрактных классов

Это что-то сродни этому

public abstract class AbstractClassA {}

public abstract class AbstractClassB : AbstractClassA {}

public class ClassA : AbstractClassB {}

Когда я пытаюсь построить эти отображения, я получаю следующую ошибку

"FluentNHibernate.Cfg.FluentConfigurationException не обработан Сообщение: неверная или неполная конфигурация использовалась при создании SessionFactory. Проверьте коллекцию PotentialReasons и InnerException для более подробной информации.

  • База данных не была настроена с помощью метода Database. "

Однако, если я уберу ключевое слово abstract из AbstractClassB, все будет работать нормально. Проблема возникает только тогда, когда у меня есть несколько абстрактных классов в иерархии классов.

Я вручную сконфигурировал автоматическое отображение, включив в него и AbstractClassA, и AbstractClassB, используя следующий класс привязки

public class BindItemBases : IManualBinding
{
    public void Bind(FluentNHibernate.Automapping.AutoPersistenceModel model)
    {
        model.IncludeBase<AbstractClassA>();
        model.IncludeBase<AbstractClassB>();
    }
}

Мне пришлось немного взломать, чтобы обойти это, но должен быть лучший способ заставить это работать. Конечно, nHibernate поддерживает что-то вроде этого, я просто не понял, как правильно его настроить.

Приветствия

Джеймс

1 Ответ

0 голосов
/ 03 апреля 2010

Почему вы включаете абстрактные классы в свои AutoMappings, они также представлены в базе данных? Не могли бы вы предоставить внутреннее исключение для бросков Fluent?

model.IncludeBase<AbstractClassA>();
model.IncludeBase<AbstractClassB>();

Имея это в виду, вы пытаетесь сопоставить AbstractClassB с базой данных, что предположительно не то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...