2009-09-04 3 views
2

Neu bei FluentNHibernate = DEinfache FluentNHibernate Eltern/Kind-Mapping

ich ein Elternteil/Kinder Klassen wie folgt:

public class Parent 
{ 
    public virtual int ID { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual IList<Child> Children { get; set; } 
} 

public class Child 
{ 
    public virtual int ID { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual Parent ActiveParent { get; set; } 
} 

Mit Abbildungen von:

public ParentMap() 
{ 
    Id(x => x.ID); 
    Map(x => x.Name); 
    HasMany(x => x.Children) 
     .Inverse(); 
     .Cascade.All(); 
} 

public ChildMap() 
{ 
    Id(x => x.ID); 
    Map(x => x.Name); 
    //Map(x => x.ActiveParent) 
    // .Column(ParentID); 
} 

Das Gebiet auf Kommentar der Kinderkarte ist die Frage, mit der ich momentan Probleme habe. Ich möchte in der Lage sein, ein untergeordnetes Objekt zu erstellen und dessen Elternelement (zB someChild.ActiveParent) zu nennen, bin mir jedoch nicht sicher, wie dies über die fließende Oberfläche gemappt werden soll.

Die Tabellenstruktur für die untergeordnete Tabelle enthält eine Parent-ID mit der Absicht, das übergeordnete Objekt beim Aufruf zu laden. Jede Hilfe wird immer sehr geschätzt.

Antwort

6
References(x => x.Parent); 
+0

Ja, definitiv flog direkt über diese. –

0

Hinzufügen zu mxmissile Antwort erhalten Sie einen LazyLoad() bis zum Ende des References() Anruf hinzufügen möchten, und man könnte auch so etwas wie dies in Ihrer Konfiguration tun:

.Mappings(m => 
    m.FluentMappings.AddFromAssemblyOf<ParentMap>() 
     .ConventionDiscovery.Add(ForeignKey.EndsWith("ID"))) 

Die letzte Zeile weist Fluent NHibernate an, Fremdschlüssel mit dem Namen ParentID anstelle des Standardwerts (Parent_Id?) zu erwarten, sodass Sie den Spaltennamen nicht mehr bei jeder Beziehungszuordnung explizit angeben müssen.

+0

Ah, danke für die zusätzliche Erläuterung auf der Konfigurationsseite. Ich war ein wenig im Dunkeln über die "Magie", die mit Spaltenzuordnungen passiert. –

+1

Fluent NHibernate hat einige andere Konventionen, die Sie bei Bedarf ändern/optimieren können. Mehr Details hier: http://wiki.fluentnhibernate.org/Conventions –