У меня проблема с отображением таблицы на иерархию в существующую базу данных с использованием Fluent NHibernate (1.2.0.712).Вот упрощенный случай.
Моя структура классов:
![Class Diagram](https://i.stack.imgur.com/ikz8p.png)
Структура базы данных:
![Database diagram](https://i.stack.imgur.com/PUY89.png)
Итакв основном, у нас есть 1 таблица (Entities), которая содержит некоторые конкретные данные (Id и Name) + несколько внешних ключей (для ReferencedObject1 ИЛИ ReferencedObject2).
Абстрактный класс AbstractEntity содержит Id и Name.ConcreteEntity1 и ConcreteEntity2 являются производными классами.
Я хотел бы отобразить эти производные экземпляры в зависимости от ссылок в базе данных, поэтому, если есть ссылка на ReferencedObject1 ->, это экземпляр ConcreteEntity1.Если есть ссылка на ReferencedObject2 -> это экземпляр ConcreteEntity2.
Некоторый код:
public class AbstractEntity
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class ConcreteEntity1 : AbstractEntity
{
public virtual ReferencedObject1 ReferencedObject1 { get; set; }
}
public class ConcreteEntity2 : AbstractEntity
{
public virtual ReferencedObject2 ReferencedObject2 { get; set; }
}
public class AbstractEntityMap : ClassMap<AbstractEntity>
{
public AbstractEntityMap()
{
Table("Entities");
Id(e => e.Id);
Map(e => e.Name);
}
}
Так что на самом деле мой вопрос заключается в том, как я должен отображать производные классы?Я просмотрел беглую вики-страницу nhibernate и обнаружил, что
Если вы хотите создать стратегию таблицы для каждой иерархии классов, то вам просто нужно указать столбец дискриминатора в ClassMap.
но, насколько я понимаю, у меня нет столбца дискриминатора.Мой случай состоит в том, чтобы определить подкласс в зависимости от ссылок на внешний ключ.
Примечание: Для нескольких столбцов дискриминатора используйте формулу DiscriminateSubClassesOnColumn (""). ([Вставьте здесь пользовательский sql])
Я не могу найти хороший пример использования формулы.Может ли это быть полезным в моем случае?И я немного растерялся, может я что-то не так делаю?
Может ли кто-нибудь мне помочь?Заранее спасибо:)