我有几个类,并希望将它们正确映射到数据库:
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列中有空值。 你能告诉我在这里缺少什么吗?
答案 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