2009-02-16 11 views
15

Ich habe Post-und Kommentar-Klassen, und sie haben eine eins zu viele Beziehung, wo Post eine Liste von Kommentaren hat. Wie kann ich dies als unidirektionale Beziehung mit Fluent NHibernate abbilden, da ein Kommentar seinen übergeordneten Post nicht kennen muss? Zur Zeit, das ist mein Mapping für Kommentar:Fluent NHibernate eins zu viele unidirektionale Zuordnung

Id(x => x.Id); 
Map(x => x.Body); 
References(x => x.User); 

und für Beitrag:

Id(x => x.Id); 
Map(x => x.Title); 
HasMany(x => x.Comments) 
    .Inverse() 
    .WithKeyColumn("PostId") 
    .Cascade.AllDeleteOrphan(); 

Das funktioniert nicht, weil, wenn ich versuche, einen Beitrag Instanz mit einem neu hinzugefügte Kommentar zu speichern, den Fremdschlüssel auf Kommentar (PostId) bleibt NULL. Und natürlich kann ein Kommentar nicht mit einer NULL PostId gespeichert werden. Ich habe versucht, die .Inverse() -Klausel zu entfernen, aber das funktioniert auch nicht.

+3

Ran in mir selbst. Sehr ärgerliche Einschränkung IMO. –

+1

Es ist möglich mit NH3.1 und höher, siehe meine Antwort auf eine ähnliche Frage http://stackoverflow.com/questions/4466153/nhibernate-configuration-for-uni-directional-one-to-many-relation/7601312# 7601312 – hazzik

Antwort

22

NHibernate unterstützt diese Zuordnung nicht, wenn Sie eine Nicht-Null-Einschränkung für Ihren Fremdschlüssel haben. Wenn Sie diese Einschränkung entfernen, sehen Sie, dass NHibernate die Kommentare mit einer Null-Post-ID einfügt und sie dann mit der ID des neuen Posts aktualisiert.

müssen Sie entweder:

  1. Entfernen Sie die nicht-NULL-Constraint und die Inverse Anruf
  2. die Einschränkung halten, und ordnen Sie die andere Seite der Beziehung (so dass diese eine bidirektionale Beziehung und Inverse ermöglicht ordnungsgemäß zu funktionieren)

Diese im NHibernate documentation for one-to-many's bedeckt ist, finden Sie in den Sehr wichtigen Hinweis am Ende.

+0

defekter Link, fyi. –

+1

Nein, ist es nicht. Die Website ist möglicherweise vorübergehend nicht verfügbar, der Link ist jedoch weiterhin gültig. –

+1

Danke für die Antwort. Es ist eine Schande, dass NH auf diese Weise arbeitet, ich sehe keinen Grund, warum es so sein sollte. –

Verwandte Themen