NHibernate, свойство реализует интерфейс, мы можем заполнить несколько таблиц? - PullRequest
1 голос
/ 15 декабря 2011

Использование NHibernate и Fluent Mappings.

У нас есть свойство (Groupable) класса (GroupAssignment), которое реализует интерфейс (IGroupable).Другим свойством того же класса является перечисление (ItemType), которое указывает источник источника IGroupable, т. Е. Из какой таблицы.

Можем ли мы отобразить эту конфигурацию так, чтобы NHibernate заполнял свойство IGroupable, ссылаясь на правильную таблицу на основена Enum дискриминатор?Если да, то как мы можем этого достичь?

Обратите внимание, что свойство IGroupable имеет отношение один к одному с классом GroupAssignment.

public class GroupAssignment
{
    public virtual new long ID { get; private set; }
    public virtual Group Group { get; set; }
    public virtual TypeEnum.TypeGroupItem ItemType { get; set; }
    public virtual IGroupable Groupable { get; set; }
}

В идеале NHibernate должен получить IGroupable из
TableAкогда ItemType == TableA,
TableB, когда ItemType == TableB и т. д.

Я также должен добавить, что каждая из таблиц, управляемых перечислением ItemType, отображается на классы, которые реализуют интерфейс IGroupable.

1 Ответ

1 голос
/ 15 декабря 2011

Вы можете достичь этого с помощью <any>. Вам даже не нужно перечисление; NHibernate позаботится о настройке правильного дискриминатора на основе конкретного Groupable.

Выезд 5.2.4. Отображения любого типа

...