我一直在阅读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!答案 0 :(得分:1)
好的,我找到了解决方案。 从我的IList映射中删除“Inverse = true”标记后,它起作用了。