Подкласс для сопоставления дополнительного столбца таблицы

#c# #nhibernate #fluent-nhibernate

#c# #nhibernate #свободно-nhibernate

Вопрос:

У меня есть класс объектов A и свободная NHibernate-карта для него AMap, которая отображает некоторые столбцы из таблицы базы данных (несколько полей отсутствуют). Я хотел бы создать класс B, который наследуется от A (чтобы не разрывать отношения с другими объектами), и сопоставить его, чтобы разрешить доступ к столбцам, не сопоставленным базовым классом. Проблема в том, что я не могу изменить ни одной строки кода в базовых классах (A и AMap). Есть ли какое-либо решение этой проблемы?

Ответ №1:

я не уверен, как вы хотите его использовать, но это может сделать

 class B : A
{

}

class BMap : ClassMap<B>
{
    public BMap()
    {
        Table("A's tablename");
        ...
    }
}
  

тогда это должно быть возможно

 someEntity.ListOfAs.Add(new B());
  

не знаю, есть ли проблемы в будущем, хотя

Комментарии:

1. Спасибо. Это сработало, но мне пришлось скопировать все сопоставления из AMap в BMap, но это то, что я могу сделать

Ответ №2:

Насколько я понимаю требование, это простая таблица для сопоставления иерархии классов. Для этого вам понадобится столбец дискриминатора.

Для сопоставления см. Последний пример на этой странице: Fluent Wiki.

Комментарии:

1. Проблема в другом, и таблица для иерархии классов здесь не будет работать.