2009-02-13 1 views
7

Im den AutoPersistenceModel in Fluent NHibernate meine Entitäten alle abzubilden und dass alles funktioniert gut: DFluent NHibernate viele zu viele Konvention für Typ

jedoch einige meiner Objekte haben

public virtual IList<Comment> Comments { get; set; } 

In der Datenbank gibt es eine einzige Kommentartabelle, und jede Entität mit dem obigen Code hat eine eigene Verknüpfungstabelle zu Kommentaren.

Im Moment, was im tun ist:

public class ContractMappingOverride : IAutoMappingOverride<Contract> 
{ 
    public void Override(AutoMap<Contract> mapping) 
    { 
     mapping.HasManyToMany(x => x.Comments) 
      .WithTableName("Comment_Contract"); 

für jede Einheit.

Gibt es eine Möglichkeit, kann ich eine Konvention, wo alle Zuordnungen zu IList <Kommentar> sind automatisch verdrahtet als vieleTomany mit der oben genannten Tabellenname Konvention?

Dank

Andrew

Antwort

5

Ich weiß, es ist nicht das, was Sie hören wollen, aber die Antwort ist nein.

Im aktuellen Design von Fluent NHibernate gibt es keine Möglichkeit, Konventionen auf Sammlungen anzuwenden, während Sie wissen, in welchen Typen sie verwendet werden. Sie können etwas auf alle Sammlungen anwenden, unabhängig von ihrem enthaltenen Typ . Dies ist ein Fehler in unserem Design und ich versuche, dies zu korrigieren, aber es ist eine ziemlich große Veränderung, also wird es nicht über Nacht passieren.

Ich würde Ihnen empfehlen, mit unserer mailing list einzuchecken, wir posten dort normalerweise Updates.

Entschuldigung, ich kann nicht hilfsbereiter sein.

+1

Fair genug, danke für die Info. Ich überprüfe die Quelle und schaue, ob ich einen Patch zusammensetzen kann, weil mir diese Funktionalität wirklich gefallen würde. –

+0

Ich habe eine Antwort auf diese Frage hinzugefügt. James, Es wäre großartig, wenn Sie einen Kommentar hinzufügen könnten, wenn meine Annahmen richtig wären oder wenn ich nicht in der Basis bin. –

+1

Ich denke, was sehr nützlich wäre, wäre eine nicht-generische Version von Override <>. Auf diese Weise wäre es relativ einfach, einige konventionsbasierte Überschreibungen durchzuführen, indem Sie die Reflektion verwenden, um Eigenschaften zu durchlaufen. –

0

Es ist schon eine Weile her, seit ich mit dem Fluent NHibernate gearbeitet habe und gerade wieder in Schwung komme (wow, seit dem Anfang 09 gab es viele Änderungen!) Und ich denke, die Antwort auf deine Frage ist jetzt Ja, Sie können dies mit der OverideAll-Funktionalität tun.

Werfen Sie einen Blick auf Overrides auf dem FNH Wiki.

+0

Leider OverrideAll kann nur (derzeit) verwendet werden, um Eigenschaften auf einer Entität zu ignorieren, nicht für das, was Andrew sucht. –