9 Stimmen

Fluent nHibernate - Zuordnung einer Liste von Zeichenketten

Ich habe ein Modell wie das folgende (vereinfacht)

public class Post
{
    public string ID { get; set; }    
    public string Title { get; set; }
    public string Body { get; set; }
    public string AuthorName { get; set; }

    public List<string> Attachments { get; set; }
}

In meiner Datenbank habe ich eine Tabelle Post und eine Tabelle PostAttachment

Die Tabelle Post Attachment hat 2 Spalten:

PostID AttachmentKey

(Die Grundlagen hierfür sind, dass der Anhang auf amazon s3 hochgeladen wird, also ist der AttachmentKey der s3-Schlüssel)

Ich möchte den AttachmentKey der Liste eines zurückgegebenen/eingefügten Post-Objekts zuordnen...

Wie würde ich vorgehen?

14voto

regisbsb Punkte 3555

@ben-hughes Du hast es fast geschafft.

Sie brauchen kein weiteres Mapping.

HasMany(x => x.Attachments)
    .KeyColumn("PostID")
    .Table("PostAttachment").Element("AttachmentKey");

7voto

Diego Mijelshon Punkte 52110

Wenn ich die Frage nicht missverstanden habe, geht es nur um Folgendes:

<bag name="Attachments" table="Attachment">
  <key column="PostId" />
  <element column="AttachmentKey" />
</bag>

ÜBRIGENS, Attachments sollte ein IList<string> , nicht List<string> .

4voto

Ben Hughes Punkte 1529

Es hat eine Weile gedauert, bis ich herausgefunden habe, wie man das mit Fluent macht. Es ist eigentlich ziemlich einfach:

public MyClassMapping()
{
    Table("MyClass");

    Id(x => x.Id);

    HasMany(x => x.Strings)
        .Table("MyClassStrings")
        .Element("String");
}

Um dies zu unterstützen, müssen Sie eine Zuordnungstabelle (MyClassStrings) erstellen, die zwei Spalten hat:

  • String - die Spalte, in der die
  • einen Fremdschlüssel zurück zur Tabelle MyClass

2voto

AlexCuse Punkte 17778

Möglicherweise benötigen Sie einen Typ um die Zeichenkette herum, und sei es nur, um einen Tabellennamen generieren zu können. Etwas wie List könnte in Ihrer Anwendung ohnehin sinnvoller sein. Ich bin sicher, Sie können tiefer graben und direkt auf die Zeichenfolge zuordnen, wenn Sie benötigen.

Von dort aus können Sie mit einer HasMany-Zuordnung und einem Fremdschlüssel beginnen, der auf Ihre Beitragstabelle zeigt, d.h.

HasMany (o => o.PostAttachments).ForeignKeyConstraintName ("FK_Attachment_Post");

Ich denke, standardmäßig wird nach einer post_ID-Spalte in Ihrer Tabelle gesucht (muss nicht auf dem Post Attachment Objekt vorhanden sein), ich bin sicher, es gibt einen Weg um dies auch, wenn Sie es brauchen.

Je nachdem, wie Sie die Post Attachments speichern möchten, benötigen Sie möglicherweise auch eine .Inverse() für die Zuordnung.

bearbeiten: nachdem ich Diegos Beitrag gesehen habe, denke ich, dass die obige Lösung funktionieren könnte, wenn PostAttachments eine Liste von Zeichenketten ist. Ich habe die Methode verwendet, die er in pre-Fluent Tage gepostet, und ich bin ziemlich sicher, HasMany Karten zu einem nhibernate Beutel standardmäßig. Wahrscheinlich müssen Sie Spaltennamen in Ihrem Mapping angeben, um vorhandene Tabelle obwohl zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X