如何在nhibernate中映射抽象类的集合

时间:2010-01-19 10:49:00

标签: nhibernate collections nhibernate-mapping polymorphism

我一直在阅读Nhibernate in Action,但关于映射多态集合的部分对于如何执行此操作有点太短了。

我有以下代码

[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();
  }
    }
}

使用上面的代码我没有收到任何错误,但是从数据库中检索我的对象后,Module中的机器集合仍然为空。机器(及其子类)的映射似乎没问题,因为正确返回了Machine类型的属性。

我需要映射我的抽象类集合的Nhibernate.Mapping.Attributes是什么?

提前thx!

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。 从我的IList映射中删除“Inverse = true”标记后,它起作用了。