【发布时间】:2012-03-28 17:03:07
【问题描述】:
我正在尝试对父/子关联建模,其中父类 (Person) 拥有子类 (OwnedThing) 的许多实例 - 我希望在保存 Person 类时自动保存 OwnedThing 实例,并且我想要关联是双向的。
public class Person
{
public class MAP_Person : ClassMap<Person>
{
public MAP_Person()
{
this.Table("People");
this.Id(x => x.ID).GeneratedBy.GuidComb().Access.BackingField();
this.Map(x => x.FirstName);
this.HasMany(x => x.OwnedThings).Cascade.AllDeleteOrphan().KeyColumn("OwnerID").Inverse();
}
}
public virtual Guid ID { get; private set; }
public virtual string FirstName { get; set; }
public virtual IList<OwnedThing> OwnedThings { get; set; }
public Person()
{
OwnedThings = new List<OwnedThing>();
}
}
public class OwnedThing
{
public class MAP_OwnedThing : ClassMap<OwnedThing>
{
public MAP_OwnedThing()
{
this.Table("OwnedThings");
this.Id(x => x.ID).GeneratedBy.GuidComb().Access.BackingField();
this.Map(x => x.Name);
this.References(x => x.Owner).Column("OwnerID").Access.BackingField();
}
}
public virtual Guid ID { get; private set; }
public virtual Person Owner { get; private set; }
public virtual string Name { get; set; }
}
如果我将 Person.OwnedThings 设置为 Inverse,则在保存 Person 时不会保存 OwnedThing 实例。如果我不添加 Inverse 则保存成功,但 person.OwnedThings[0].Owner 在我从数据库中检索后始终为空。
更新 保存数据时,NHibernate 将在数据库中设置单个关联端,因为它是通过关联的多端设置的,所以当我从数据库中检索 OwnedThing 时,它确实有返回到的链接人集。我的空引用来自 Envers,它似乎没有做同样的事情。
【问题讨论】:
标签: nhibernate fluent-nhibernate