2010-10-14 20 views
0

Je viens tout juste d'apprendre NHibernate, et je suis les tutoriels suivants. Sur mon propre projet d'apprentissage, j'ai fait un problème pour moi-même. J'ai deux tables:Problème de mappage NHibernate - Impossible d'initialiser le proxy - pas de session

Team: 
TeamId* 
Name 


Match: 
MatchId* 
TeamAId 
TeamBId 

Les entités du modèle sont:

équipe

public virtual int? TeamId { get; private set; } 
public virtual string Name { get; set; } 
public virtual IList<Match> HomeMatches { get; set; } 
public virtual IList<Match> AwayMatches { get; set; } 

match

public virtual int? MatchId { get; private set; } 
public virtual Team TeamA { get; set; } 
public virtual Team TeamB { get; set; } 

Et voici ma correspondance pour l'équipe:

<property name="Name" type="string"> 
     <column name="Name" sql-type="nvarchar" not-null="true"/> 
    </property> 


    <bag name="HomeMatches" inverse="true" cascade="all-delete-orphan"> 
     <key column="TeamAId" /> 
     <one-to-many class="Match"/> 
    </bag> 

    <bag name="AwayMatches" inverse="true" cascade="all-delete-orphan"> 
     <key column="TeamBId" /> 
     <one-to-many class="Match"/> 
    </bag> 

Et ceci est pour Match:

<many-to-one name="TeamA" class="Team"> 
     <column name="TeamAId" sql-type="int" not-null="true" /> 
    </many-to-one> 

    <many-to-one name="TeamB" class="Team"> 
     <column name="TeamBId" sql-type="int" not-null="true" /> 
    </many-to-one> 

Je suppose que ce n'est pas la bonne façon de le faire, puisque je reçois un message d'erreur: NHibernate.LazyInitializationException: Initialiser [MyProject.Domain.Entities.Team # 1] -Could ne peut pas initialiser proxy - aucune session.

  1. Y at-il un problème avec ma cartographie?
  2. Si non, aucune suggestion sur la façon dont je peux gérer l'erreur?

Merci.

+0

Cela ne ressemble pas à un problème de mappage, mais à un problème d'élimination ou de fermeture d'une session trop tôt. – Paco

Répondre

9

Le problème ne réside pas dans le mappage, mais dans la gestion de la session.

Vous fermez la session et tentez d'accéder à une propriété paresseusement chargée (une équipe).

+0

C'était correct. J'utilisais cependant ASP.NET MVC et à cause de cela, j'ai dû implémenter des fonctionnalités supplémentaires pour gérer le chargement paresseux avec des vues. – Buginator