Come mappare una classe di entità di gruppo da una colonna “nome di gruppo” in NHibernate?
-
21-09-2019 - |
Domanda
Ho una tabella nel mio database cercando o meno in questo modo:
create table Foo (
Id int identity not null,
Name varchar(100) not null,
GroupName varchar(100) not null,
constraint PK_Foo primary key (Id)
)
Ora voglio mappare questa tabella in due classi di entità simile a questo:
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; }
}
Questo è possibile con NHibernate? Ho provato a cercare la rete e documenti NH, ma io davvero non so che cosa cercare -. Idee per la query di ricerca sarebbe apprezzato
Forse posso fare una mappatura per FooGroup
che utilizza una query personalizzata HQL / SQL per selezionare i nomi dei gruppi distinti, e un altro query personalizzata per selezionare l'insieme appropriato di elementi contenuti?
Soluzione
Non credo che sia possibile fare ciò che si vuole puramente nella mappatura NHibernate ... anche se potrei essere smentito da qualcun altro: -)
OTOH è abbastanza facile definire una mappatura diretta dal vostro tavolo in:
class RawFooData
{
public virtual in Id { get; private set; }
public virtual string Name { get; set; }
public virtual string GroupName { get; set; }
}
e quindi elaborare questo per ottenere i valori desiderati:
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);
}
Credo che troverete solo problemi di prestazioni qui se avete a che fare con grandi quantità di dati (ad esempio 10K righe o più).