Сопоставление отношения «многие ко многим» для наследования классов в гибернации / NHibernate

#hibernate #nhibernate #fluent-nhibernate #fluent-nhibernate-mapping

#режим гибернации #nhibernate #свободно владеет языком-nhibernate #fluent-nhibernate-отображение

Вопрос:

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

 public class D{
 public List<A> ListofA {get;set;}
}

public interface A{
}

public class B implements A{
}

public class C implements A{
}
 

class B сопоставляет с таблицей B
class C сопоставляет с таблицей C

A — это просто интерфейс, который не сопоставляется ни с какой таблицей.

Как мне определить полиморфную ( many-to-many ) связь между D -> A

Я использую NHibernate с. FluentMapping

Ответ №1:

Я пытаюсь ответить на свой собственный вопрос. Однако я хотел бы найти ЛУЧШЕЕ / БОЛЕЕ РАЦИОНАЛЬНОЕ решение этой проблемы.

Вот мое решение:

Редизайн Class D

Я перепроектирую class D как

       public class D {
              public List<MagicObj> ListofA {get;set;}
      }

       //New Entity added which was not there in the question before.
       public class MagicObj{
              public A   ActualEntity{get;set;}
       }
 

В остальных объектах изменений нет.

          public interface A{

         }

         public class B implements A{

         }

         public class C implements A{

         }
 

Это изменение дизайна должно позволить мне сопоставить

Свободное сопоставление

для вышеупомянутой переработанной структуры классов

 D->MagicObj as HasMany(x=>x.ListofA)
MagicObj->A as ReferenceAny(x=>x.ActualEntity)
                    .EntityIdentifierColumn("EntityType")
                    .EntityIdentifierColumn("EntityId");
 

Думаю, я решил использовать добавить новое отношение между Class D и Class A это
Я не смог найти способ отобразить его напрямую в Fluent.