Wie eine Gruppe Entitätsklasse von einer „Gruppenname“ -Spalte in NHibernate abzubilden?
-
21-09-2019 - |
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?
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).