Comment tracer une classe d'entité du groupe à partir d'une colonne « nom du groupe » dans NHibernate?

StackOverflow https://stackoverflow.com/questions/1367355

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?

Était-ce utile?

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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top