Pregunta

Tengo una tabla en mi base de datos buscando más o menos así:

create table Foo (
    Id             int identity       not null,
    Name           varchar(100)       not null,
    GroupName      varchar(100)       not null,
    constraint PK_Foo primary key (Id)
)

Ahora quiero mapear esta tabla en dos clases de entidad de esta manera:

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; }
}

¿Es esto posible con NHibernate? He tratado de buscar en la red y documentos de NH, pero realmente no sé qué buscar -. Ideas para consultas de búsqueda serán bienvenidos

Tal vez pueda hacer una asignación para FooGroup que utiliza una consulta personalizada HQL / SQL para seleccionar los nombres de grupos distintos, y otra consulta personalizada para seleccionar el conjunto adecuado de los elementos contenidos?

¿Fue útil?

Solución

No creo que sea posible hacer lo que quiere puramente en el mapeo de NHibernate ... aunque podría estar equivocado por otra persona: -)

otoh que es bastante fácil de definir una asignación directa de su tabla en:

class RawFooData 
{
    public virtual in Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual string GroupName { get; set; }
}

y luego procesar este para salir los valores que desee:

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);
}

Creo que sólo encontrará aquí los problemas de rendimiento si se trata de cantidades muy grandes de datos (por ejemplo 10K filas o más).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top