2010-01-25 5 views
0

Une collection chargée paresseuse dans NHibernate devrait-elle jamais me donner une exception NullReferenceException? Je reçois une exception dans une méthode comme suit:NHibernate - Lazy Loaded Collection

public void Test(ISession session, int id) 
{ 
    var entity = session.Load<MyEntity>(id); 
    entity.LazyLoadedCollection.Add(SomeItem); 
} 

L'appel à LazyLoadedCollection est de lancer. Mon mappage ressemble à:

<bag lazy="true" table="MyTable"> 
    <key> 
    <column name="LazyLoadedCollection" /> 
    </key> 
    <many-to-many class="LazyLoadedItem"> 
    <column name="LazyLoadedItemId" /> 
    </many-to-many> 
</bag> 

Est-ce le comportement attendu dans NHibernate?

Répondre

2

C'est difficile à dire sans voir votre classe, mais une chose que vous n'avez peut-être pas réalisée est que vous devez remplir chaque collection du constructeur de votre classe. NHibernate remplacera ces collections par des siennes à certains moments, mais vous devez toujours vous assurer qu'elles sont initialement remplies avec HashedSet<T>, List<T>, ou autre chose selon l'interface que vous utilisez.

-2

Non, ce n'est pas le cas. Ce n'est pas une bonne façon de poser une question sur internet.

Et il est vraiment impossible de vous donner une direction quoi faire si vous ne postez pas le code en lançant l'exception et dites-nous d'où vient l'exception.

+0

Comme je l'ai dit dans la publication, l'exception provient de l'appel de entity.LazyLoadedCollection.Add. Je ne comprends vraiment pas pourquoi le code suivant l'exception est important. J'obtiens une instance de mon entité appelant Session.Load et essayant d'ajouter un objet à une propriété qui est une collection qui est paresseuse chargée. Pouvez-vous me dire quelle partie de ce n'est pas clair? –

+1

Le code de la classe d'entité. Je suis sûr que l'exception n'est pas causée par NHibernate mais par quelque chose d'autre que je ne vois pas dans votre exemple de code. Que se passera-t-il quand vous faites une nouvelle Entité(). LazyLoadedCollection.Add() sans aucun mappage ou référence à NHibernate? Je suppose la même chose, mais je ne sais pas comment vous l'avez mis en œuvre. – Paco

Questions connexes