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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top