流利的nhibernate组件一对多

时间:2010-11-22 22:17:27

标签: nhibernate fluent-nhibernate mapping

我有几个类,并希望将它们正确映射到数据库:

public class A
{
    public virtual Guid Id { get; private set; }
    public virtual ComponentClass Component { get; set; }
}

public class ComponentClass 
{
    public virtual IList<B> Elements { get;set; }
}

public class B
{
    public virtual Guid Id { get; private set; }
    public virtual DateTime Time { get; set; }
}

我使用流畅的映射来映射它们:

public class AMap : ClassMap<A> 
{
    public A() {
        Id(x => x.Id);
        Component(x => x.Component,
                  c => c.HasMany(x => x.Elements).Inverse().Cascade.All());
    }
}

public class BMap : ClassMap<B>
{
    public B() {
        Id(x => x.Id);
        Map(x => x.Time);
    }
}

当我保存我的实体时,我将A类映射到一个表,将B类映射到另一个表,如预期的那样。 但是我在Component_id列中有空值。 你能告诉我在这里缺少什么吗?

3 个答案:

答案 0 :(得分:1)

我认为组件应该在Ayende's blog post中明确说明的同一个表中,因为它们仅用于使数据更好地表示为对象模型。一定要仔细阅读他的博客,它可能是最好的nHibernate资源之一。

答案 1 :(得分:1)

好的,我已经解决了我的问题 - 我可以使用我的“父”类的Id。因此组件映射将变为:

public class AMap : ClassMap<A> 
{
    public A() {
        Id(x => x.Id);
        Component(x => x.Component,
                  c => c.HasMany(x => x.Elements).Cascade.All().Column("Id"));
    }
}

现在看起来很明显......但我花了一个小时。

答案 2 :(得分:1)

如果你有一对多的关联指向一个组件集合(即根据问题没有--sub-border-color包装器),那么你可以直接映射它:

ComponentClass