Frage

Ich habe eine Tabelle in meiner Datenbank etwa wie folgt aussehen:

create table Foo (
    Id             int identity       not null,
    Name           varchar(100)       not null,
    GroupName      varchar(100)       not null,
    constraint PK_Foo primary key (Id)
)

Jetzt möchte ich so in dieser Tabelle in zwei Entitätsklassen zur Karte:

class Foo {
    public virtual in Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual Group Group { get; set; }
}

class FooGroup {
    public virtual string Name { get; set; }
    public virtual ISet<Foo> Foos { get; private set; }
}

Ist das möglich mit NHibernate? Ich habe versucht, das Netz und NH docs zu suchen, aber ich weiß wirklich nicht, was zu suchen -. Ideen für Suchanfrage würden geschätzt

Vielleicht kann ich eine Zuordnung für FooGroup machen, das ein benutzerdefinierte verwendet HQL / SQL-Abfrage der eindeutigen Gruppennamen auszuwählen, und eine andere benutzerdefinierte Abfrage des entsprechenden Satz enthaltenen Elemente auszuwählen?

War es hilfreich?

Lösung

Ich glaube nicht, ist es möglich, zu tun, was Sie rein in dem NHibernate-Mapping wollen ... obwohl ich falsch von jemandem nachgewiesen werden kann sonst: -)

OTOH ist es ziemlich einfach, eine einfache Zuordnung von Tisch zu definieren, in:

class RawFooData 
{
    public virtual in Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual string GroupName { get; set; }
}

und dann diese verarbeiten, um die Werte zu erhalten out Sie wollen:

IEnumerable<FooGroup> groups = allRawFooData.Select(data => data.GroupName)
                                        .Distinct()
                                        .Select(name => new FooGroup() 
                                                        {
                                                           Name = name
                                                        });

foreach(var group in groups)
{
    group.Foos = allRawFooData.Where(data => data.GroupName == group.Name);
}

Ich denke, Sie werden nur Performance-Probleme finden Sie hier, wenn Sie mit sehr großen Datenmengen zu tun (zum Beispiel 10K Zeilen oder mehr).

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