2009-09-30 6 views
1

J'ai essayé de charger paresseux une propriété dans mon modèle de domaine, mais le chargement paresseux ne fonctionne pas. (Il est toujours chargé).Propriété de chargement paresseux de NHibernate - que signifie l'instrumentation de bytecode en temps de construction?

[Property(0, Column = "picture", Lazy=true)] 
public virtual System.Byte[] Picture 
{ 
     get { return picture; } 
     set { picture = value; } 
} 

Lors de la lecture de la documentation here il dit qu'il faut construire intrumentation bytecode. Qu'est-ce que cela signifie - et comment puis-je l'obtenir?

+0

Voir la réponse de Aaron Fischer. Vous devriez prendre un IList, le chargement paresseux ne fonctionne pas avec les tableaux, car les tableaux ne peuvent pas être dérivés (ce qui est utilisé pour ajouter la fonctionnalité de chargement paresseux par le proxy généré à l'exécution). Oubliez l'amélioration du bytecode en temps de construction, ce n'est pas nécessaire. –

Répondre

0

Pour que le chargement paresseux fonctionne, NHibernate utilise l'interception (via des objets dynamiques). Cela signifie qu'il enveloppe votre appel à Picture et lorsque vous appelez Picture It, il charge la propriété de la base de données.

Pour que cela fonctionne, il peut utiliser l'un des trois types de cadres d'objets dynamiques:

  • Château DynamicProxy
  • Linfu
  • printemps

Lorsque vous téléchargez NHibernate il y a un autre dossier avec trois types de ces plugins d'objets dynamiques et vous devez copier trois dll dans le dossier nhibernate (où nhibernate.dll est) et définir une propriété dans votre configuration nhibernate le.

<property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property> 

Ref: http://nhforge.org/blogs/nhibernate/archive/2008/11/09/nh2-1-0-bytecode-providers.aspx

HTH Alex

+0

Je l'ai essayé avec Linfu et Spring - mais il n'a pas été trop lent pour charger l'objet. l'objet image a toujours été initialisé (même s'il n'a pas été accédé jusque-là) – bernhardrusch

1

Je vous ai essayé une collection plutôt que d'un tableau?

[Property(0, Column = "picture", Lazy=true)] 
public virtual IList<System.Byte> Picture 
{ 
     get { return picture; } 
     set { picture = value; } 
} 
Questions connexes