2009-03-14 6 views
2

Ich versuche, eine Viele-zu-viele-Sammlung mit Fluent NHibnernate zu bilden. Meine Modellklasse hat diese Eigenschaft:Fließend NHibnernate HasManyToMany mit Index

public virtual IList<Resource> Screenshots 
{ 
    get { return _screenshots; } 
    protected set { _screenshots = value; } 
} 

Und meine fließend Mapping ist:

HasManyToMany(x => x.Screenshots) 
       .AsList(x => x.WithColumn("Index")) 
       .Cascade.AllDeleteOrphan(); 

Wenn ich meine Anwendung ausführen, ich die folgende Ausnahmemeldung erhalten:

Das Element ‚-Liste 'im Namensraum ' urn: nhibernate-mapping-2.2 'hat ungültiges untergeordnetes Element' viele-zu-viele ' im Namensraum ' urn: nhibernate-mapping-2.2 '. Liste der möglichen Elemente erwartet: 'Index, Listenindex' in Namespace 'Urne: Nhibernate-Mapping-2.2'.

Es sollte einen Weg geben, dies zu tun. Weiß jemand was ich falsch mache?

+0

Verwenden Sie eine Verknüpfungstabelle für Ihre Viele-zu-Viele-Beziehung? – gcores

+0

Ich habe seit dem entdeckt, dass dies ein Bug in Fluent NHibnernate war. Es ist dokumentiert als behoben in der neuesten Version. – EisenbergEffect

+1

Vielleicht möchten Sie dies selbst mit dem Link zu diesem Fehlerbericht und den entsprechenden Versionsnummern beantworten. –

Antwort

3

ist die aktuelle FluentNHibernate Syntax für diese wie folgt:

HasManyToMany(x => x.Screenshots) 
    .AsList(i => i.Column("`Index`")); 

Der Index Spalte standardmäßig Index, aber das ist ein reserviertes Wort auf SQL Server (und wahrscheinlich auch andere Datenbanken), so dass Sie es zitieren müssen mit Back-Ticks.

Auch würde ich empfehlen, eine Kaskade auf diese Beziehung einzustellen. Berücksichtigen Sie den folgenden Code:

x.Screenshots.Remove(s); 
session.SaveOrUpdate(x); 

NHibernate wird Zeilen aus der Verknüpfungstabelle auch ohne eine Kaskade korrekt löschen. Wenn Sie jedoch AllDeleteOrphan angeben, löscht NHibernate die Zeile aus der Verknüpfungstabelle und löscht auch die Ressource s. Ich bezweifle, dass dies das Verhalten ist, das Sie in einer Viele-zu-Viele-Beziehung wollen.