2008-12-02 12 views
5

Tengo una relación de varios a uno donde la tabla hija puede tener cientos de miles de registros. En este caso, llamar a Parent.ChildCollection.Count fuerza una inicialización lenta de la colección secundaria, que es extremadamente costosa.La mejor forma de implementar una funcionalidad similar a lazy = "extra" usando NHibernate 2.0.1

En Hibernate 3.0 hay una función lazy = "extra" que le permite consultar un subconjunto de propiedades de la colección sin cargar todo perezoso.

Lamentablemente, esto no estará disponible hasta NHibernate 2.1, que todavía está en Alpha. http://jira.nhibernate.org/browse/NH-855

¿Cómo puedo lograr esto con NHibernate 2.0.1?

que solía tener propiedades especiales como este

<property name="ChildCollectionCount" type="int" formula="(select count(*) from ChildTable child where child.parentID = parentID "/> 

pero no puede utilizar estos más porque ahora estoy compartiendo esta biblioteca y su un problema de rendimiento para otros usuarios.

+1

¿Actualizar a NHibernate 3 y cerrar esta pregunta? –

Respuesta

0

Cuando dice que es un problema de rendimiento para otros usuarios, ¿quiere decir que también quieren acceder a la colección, pero es demasiado grande para ellos? ¿O el fragmento de código/ChildCollectionCount es demasiado lento para ellos?

Si es el primer caso, entonces quizás necesite hacer una solución similar para ellos: identifique exactamente lo que necesitan y proporcione los métodos que ofrecen esa instalación.

0

muy tarde, pero se puede aplicar un filtro en la colección

IQuery q = nhSession.CreateFilter(Parent.ChildCollection, "select count(*)"); 
long countResult = q.UniqueResult<long>(); 

esto no va a forzar una inicialización de la colección sino realizar una sola consulta a la base de datos

0

Yo recomendaría una separada consulta, en lugar de una relación de dominio. Entonces puedes usar todo tipo de optimizaciones.

Cuestiones relacionadas