Я пытаюсь смоделировать родительскую / дочернюю ассоциацию, где родительскому классу (Person) принадлежит много экземпляров дочернего класса (OwnedThing) - я хочу, чтобы экземпляры OwnedThing сохранялись автоматически при сохранении класса Person, и я хочу, чтобы ассоциация должна быть двунаправленной.
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, то экземпляры OwnedThing не сохраняются при сохранении Person. Если я не добавлю Inverse, то сохранение будет успешным, но person.OwnedThings [0] .Owner всегда будет нулевым после того, как я получу его из БД.
UPDATE
При сохранении данных NHibernate установит один конец ассоциации в базе данных, потому что он устанавливается через многолинейный конец ассоциации, поэтому, когда я получаю OwnedThing из БД, он имеет ссылку на Человек установлен. Моя нулевая ссылка была от Энверса, который, кажется, не делает то же самое.