Considérez des objets comme ceux-ci :
public partial class Record
{
public int RecordID {get; set;}
public DateTime? Created { get; set; }
public int CreatorUserUserObjectNDX { get; set; }
public UserObject Creator { get; set; }
...
}
et
public partial class UserObject
{
public virtual int ID {get; set;}
public virtual string Name {get; set;}
}
et leurs mappings comme suit:
Ils sont intentionnellement gardés simples ici, en réalité ils sont plus complexes avec des collections one-to-many, etc., mais ceux-ci fonctionnent, donc ce n'est pas le point ici.
Le problème que j'ai rencontré est que, lorsque j'utilise des définitions et des mappings comme ceux-ci, et que je fais simplement
var results = session.QueryOver()
.List();
NHibernate NE crée PAS de proxy pour la propriété creator
, il utilise simplement des jointures externes dans l'instruction SQL exécutée et insère directement un UserObject
. Lorsque je change lazy='false'
en lazy='true'
dans le mapping pour UserObject, ça fonctionne, le proxy est créé et l'instruction SQL exécutée n'a pas de jointures externes.
Donc, est-il strictement nécessaire de définir lazy='true'
pour toutes les classes qui peuvent être une référence n'importe où? Je pensais pouvoir le définir sur false par défaut pour tous les mappings et définir lazy='proxy'
dans la définition many-to-one, quand c'est nécessaire.
J'utilise NHibernate 3.2, donc pas de configuration concernant proxyfactory. Que me manque-t-il ici?