¿Está lidiando con la carga diferida fuera de una ISession?

Estoy usando NHibernate para acceder a la base de datos en mi aplicación. Mi ISessions no tienen persistencia, y estoy contento con esto, ya que me facilita separar mi aplicación en diferentes capas. La única dificultad es lidiar con la carga diferida de una manera agradable.

Tengo una clase modelo que se ve así:

public class User {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Country CountryOfBirth { get; set }
    public virtual Country CountryOfResidence {get; set; }
}

Por el momento, tengo CountryOfBirth y CountryOfResidence establecido en fetch="join". Sin embargo, como la lista de países en mi base de datos es mayormente estática, quiero almacenar en caché estos valores. cambié el CountryOfBirth propiedad para verse así:

    Country countryOfBirth;
    public virtual Country CountryOfBirth{
        get
        {
            if (country is INHibernateProxy)
                countryOfBirth = CountryRepository.GetById(countryOfBirth.Id);
            return countryOfBirth;
        }
        set { countryOfBirth = value; }
    }

Sin embargo, requiere que mi clase Model sepa que está siendo utilizada por NHibernate, lo que rompe la encapsulación.

¿Hay una mejor manera de lograr esto? Por ejemplo, ¿hay alguna manera de hacer que NHibernate revise automáticamente mis clases de Repositorio si intenta cargar un proxy y la sesión ha expirado?

¿O debería usar un método diferente?

preguntado el 03 de mayo de 12 a las 11:05

1 Respuestas

Si desea agregar capacidades de caché, consulte NHibernate L2 Cache. Mira este tutorial http://nhforge.org/blogs/nhibernate/archive/2009/02/09/quickly-setting-up-and-using-nhibernate-s-second-level-cache.aspx y busque este tema. Al usar el caché, no contamina su modelo con ningún proxy, repositorio, etc. de NH.

contestado el 03 de mayo de 12 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.