Frage

Ich denke, das ist eine mäßig Neophyt Frage. Ich habe mit NHibernate / FluentNHibernate für ca. 6 Monate oder so, und ich glaube, ich ein faires Verständnis der Grundlagen haben. Jetzt bin ich schiebe ein wenig darüber hinaus. Ich bin sicher, wird dies dokumentiert, aber ich habe mehrere Stunden nun auf Google verbracht, und habe es nicht ganz herausgefunden.

ich einfach Klasse haben, rufen Sie es einfach:

public class Simple
{ public string Name { get; set;}
  public string Desc { get; set; }
  public string Status { get; set;}
}

Status gezwungen ist, tatsächlich zu einer kleinen Gruppe von Werten zu sein: „ACTIVE“, „HOLD“ und „ZU“. Im DB-Schema, habe ich eine einfache Nur-Lese-Tabelle namens RetrofitStatus:

CREATE TABLE [dbo].[RetrofitStatus](
[Status] [nvarchar](10) NOT NULL,
[SortOrder] [smallint] NOT NULL,
CONSTRAINT [PK_RetrofitStatus] PRIMARY KEY CLUSTERED 
(
    [Status] ASC
)

Und es gibt eine Fremdschlüsseleinschränkung für die einfache Tabelle, um sicherzustellen Der Status ist in RetrofitStatus.

Der Zweck der RetrofitStatus Tabelle ist die SortOrder Spalte enthalten, so dass ich (in SQL) tun kann,

SELECT * from Simple s join RetrofitStatus r on r.Status=s.Status ORDER BY r.SortOrder

und sortieren meine Ergebnisse in einer Anzeigereihenfolge (zB alle aktiven Einträge zuerst, dann ON-HOLD-Einträge, dann CLOSED Einträge, da ich auf einer logischen Reihenfolge bin Sortierung, nicht alphabetisch oder irgendetwas anderes leicht erkennen).

Meine Frage ist, wie modelliere ich das Objekt und Beziehung in FNH? Ich kann die SortOrder Eigenschaft meiner Einfache Definition hinzufügen und eine Make eine Ansicht, die das bedeutet, aber was passiert, wenn ich versuche, neue einfache Objekte in die Tabelle einfügen? Offensichtlich will ich nicht versuchen, die SortOrder Eigenschaft einzufügen. Ich glaube, ich brauche irgendwie das NHib Element zu verwenden, aber wieder, ich bin mir nicht klar, wo das muss gehen, was auf dem Einsatz geschieht, und wie es in Fluent zu tun?

Ich werde mit Trial-and-error, um versuchen zu experimentieren, aber ich dachte, dass vielleicht jemand, der weiß, was sie tun (was ich nicht) mich in die richtige Richtung zeigen kann und rette mich einige Zeit. Vielen Dank für Ihre Hilfe.

War es hilfreich?

Lösung

Angenommen, Sie modifiziert ein Simple Klasse war wie folgt (ich war nicht sicher, was Sie über einen Schlüssel taten):

public class Simple
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public string Status { get; set; 
    public int SortOrder { get; set; }
}

Sie wie diese Karte könnte:

public SimpleMap : ClassMap<Simple>
{
    Id(x => x.Id).Unique().GeneratedBy.Native();
    Map(x => x.Name);
    Map(x => x.Desc);
    Join("RetrofitStatus", join =>
    {
        join.KeyColumn("Status") 
            .Map(x => x.Status);
        join.Map(x => x.SortOrder).Not.Insert();
    });
}

Ich habe nicht getestet, aber das ist der Kern von ihm.

Sie können festlegen, dass eine Eigenschaft kann nicht mithilfe Not.Insert() oder Not.Update() eingefügt oder aktualisiert werden, die jeweils in Ihrem Mapping oder weder noch aktualisiert eingefügt wird durch ReadOnly() verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top