Ich versuche, eine Eltern/Kind-Assoziation zu modellieren, wo eine Elternklasse (Person) viele Instanzen einer Kindklasse besitzt (OwnedThing) - Ich möchte, dass die OwnedThing-Instanzen automatisch gespeichert werden, wenn die Person-Klasse ist gespeichert, und ich möchte, dass die Assoziation bidirektional ist.NHibernate bidirektionale Assoziation
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; }
}
Wenn ich Person.OwnedThings eingestellt dann Inverse die OwnedThing Instanzen werden nicht gespeichert, wenn ich die Person zu speichern. Wenn ich Inverse nicht hinzufüge, ist das Speichern erfolgreich, aber person.OwnedThings [0] .Owner ist immer Null, nachdem ich es aus der DB abgerufen habe.
UPDATE Wenn die Daten NHibernate Speicher der einzelnen Assoziationsende in der Datenbank festgelegt, da es über das viel Ende des Vereins festgelegt ist, so dass, wenn ich den OwnedThing aus der DB abrufen es tut haben die Link zurück zum Personensatz. Mein NULL-Verweis stammte von Envers, der das nicht zu tun scheint.