Как отобразить коллекцию абстрактных классов в nhibernate - PullRequest
2 голосов
/ 19 января 2010

Я читал Nhibernate в действии, но в разделе о сопоставлении полиморфных коллекций слишком мало о том, как это сделать.

У меня есть следующий код

[Class]
[Discriminator(Column="MachineType",TypeType=typeof(string))]
public abstract class Machine
{
  [Property]
  public string Name{get;set;}
}

[Subclass(DiscriminatorValue="Heavy",ExtendsType=typeof(Machine))]
public class HeavyMachine : Machine
{
  [Property]
  public int Weight { get; set; }
}

[Subclass(DiscriminatorValue="Fast",ExtendsType=typeof(Machine))]
public class FastMachine : Machine
{
  [Property]
  public float Speed { get; set; }
}

[Class]
public class Module
{
    List<Machine> machines = new List<Machine>();

    [Bag(Name = "Machines", Cascade = "all", Lazy = false, Inverse=true)]
    [Key(1, Column = "Machine")]
    [OneToMany(2, ClassType = typeof(Machine))]
    public IList<Machine> Machines
    {
      get
      {
        return machines.AsReadOnly();
      }
      private set
      {
        machines = value.ToList();
  }
    }
}

С кодом выше я не получаю никаких ошибок, но Коллекция машин в Модуле остается пустой после получения моих объектов из базы данных. Отображение Machine (и его подклассов) выглядит нормально, потому что свойство типа Machine возвращается правильно.

Какие Nhibernate.Mapping.Attributes мне нужны для сопоставления моей коллекции абстрактных классов?

спасибо заранее!

1 Ответ

1 голос
/ 19 января 2010

Хорошо, я нашел решение. После удаления тега «Inverse = true» из моего сопоставления IList все заработало.

...