Свободные автоматические сопоставления с абстрактной базой также являются частью модели

Хорошо, во-первых, я надеюсь, что это имеет смысл.

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

public abstract class Container
{
  public virtual int Id {get; set};
  public virtual string Name {get; set;}
}

public class FirstSubClass : Container
{
   //properties and behaviour here
}

public class SecondSubClass : Container
{
  //properties of SecondSubclass Here
}

public class ProcessStep
{
   public virtual Container Source {get; set}
   public virtual Container Destination {get; set;}
}

Однако, когда я пытаюсь сгенерировать схему или протестировать свои сопоставления (с помощью SQLite или иным образом), он не замечает:

NHibernate.MappingException: ассоциация из таблицы ProcessStep относится к несопоставленному классу: ...... Entities.Container

Если я изменю класс контейнера и сделаю его не абстрактным, он будет работать.

Могу ли я предоставить свойство сущности по отношению к базовому типу, при этом базовая останется абстрактной?

Любая помощь будет принята с благодарностью.


person Tim Butterfield    schedule 07.04.2011    source источник


Ответы (1)


По умолчанию Fluent Nhibernate игнорирует абстрактные базовые классы при создании сопоставлений. Чтобы включить его, вам нужно использовать метод IncludeBase:

AutoMap.AssemblyOf<Container>(cfg)
       .IncludeBase<Container>();
person Sly    schedule 08.04.2011
comment
Спасибо @Sly. Я фактически перешел с момента постановки вопроса и задумался, могу ли я перейти от абстрактной основы к интерфейсу. Итак, где я упомянул контейнер, заменить его на IContainer? Возможно ли это, поскольку ProcessStep не может поддерживать какое-либо заданное ограничение ключа. Могу ли я затем сгенерировать схему без создания ограничения и с учетом нулей? - person Tim Butterfield; 08.04.2011