Comment tracer une classe d'entité du groupe à partir d'une colonne « nom du groupe » dans NHibernate?
-
21-09-2019 - |
Question
J'ai une table dans ma base de données à la recherche à peu près comme ceci:
create table Foo (
Id int identity not null,
Name varchar(100) not null,
GroupName varchar(100) not null,
constraint PK_Foo primary key (Id)
)
Maintenant, je veux mapper ce tableau en deux classes d'entités comme ceci:
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; }
}
Est-ce possible avec NHibernate? J'ai essayé de rechercher le docs net et NH, mais je ne sais vraiment pas ce qu'il faut chercher -. Idées pour les requêtes de recherche seraient appréciés
Peut-être que je peux faire une cartographie pour FooGroup
qui utilise une HQL personnalisée / requête SQL pour sélectionner les noms de groupes distincts, et une autre requête personnalisée pour sélectionner l'ensemble approprié des éléments contenus?
La solution
Je ne pense pas qu'il soit possible de faire ce que vous voulez uniquement dans le mapping NHibernate ... bien que je pourrais être détrompé par quelqu'un d'autre: -)
OTOH il est assez facile de définir une cartographie simple de votre table dans:
class RawFooData
{
public virtual in Id { get; private set; }
public virtual string Name { get; set; }
public virtual string GroupName { get; set; }
}
et ensuite traiter ce pour obtenir les valeurs que vous voulez:
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);
}
Je pense que vous ne trouverez que des problèmes de performance ici si vous avez affaire à de très grandes quantités de données (par exemple 10K lignes ou plus).