Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > NHibernate
NHibernate Forum d'entraide sur l'utilisation du mappeur objet/relationnel NHibernate.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/04/2011, 17h14   #1
playa
Invité de passage
 
Inscription : mars 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 32
Points : 4
Points : 4
Par défaut [Nhibernate] Impossible d'effectuer un cast d'un objet de type 'NHibernate.Collection.Generic.PersistentGeneri

Bonjour,
je comprends pas pourquoi j'ai cette erreur avec nhibernate
Citation:
Impossible d'effectuer un cast d'un objet de type 'NHibernate.Collection.Generic.PersistentGenericSet`
Mon mapping "subcription"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
  <class name="HPComVersion2.Bul.Entities.Subscription,HPComVersion2Bul" table ="CIS_APL" lazy="true">
 
    <id name="Id" column="ID_APPLI"  >
      <generator  class="native" />
    </id>
 
    <property     name="Groupapply"       column="ID_GROUPE_APPLI" />
    <property     name="NomAppli"         column="LIB_APPLI" />
 
    <set name="ListeAbo"  table="CIS_ABO_UTL" inverse="true">
      <key>
        <column name="ID_APPLI"/>
      </key>
      <many-to-many class="HPComVersion2.Bul.Entities.Subscripber,HPComVersion2Bul" column="ID_UTILISATEUR"/>
    </set>
 
  </class>
</hibernate-mapping>
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Namespace Entities
    Public Class Subscription
       [...]
        Private _listeabonne As ICollection(Of Subscripber)
 
        [...]
 
        Public Overridable Property ListeAbo() As ICollection(Of Subscripber)
            Get
                Return _listeabonne
            End Get
            Set(ByVal value As ICollection(Of Subscripber))
                _listeabonne = value
            End Set
        End Property
 
 
        Public Sub New()
            _id = String.Empty
            _groupappli = String.Empty
            _libappli = String.Empty
            '_listeabonne = Nothing
        End Sub
 
    End Class
End Namespace
Ma fonction
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Public Function GetListSubcribers(ByVal nomGroupe As String) As List(Of Subscripber) Implements ISubcripbeManagementService.GetListSubcribers
            'Load the configuration file hibernate.cfg.xml
            Dim config As Configuration = New Configuration().Configure(System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase)) & "\hibernate.cfg.xml")
            Dim factory As ISessionFactory = Nothing
            Dim session As NHibernate.ISession = Nothing
            Dim transaction As NHibernate.ITransaction = Nothing
            Dim subscripber As ICollection(Of Subscripber)
 
            Try
                factory = config.BuildSessionFactory()
                'open a session
                session = factory.OpenSession()
                Dim _ReturnList As IList(Of Subscription)
 
                'On regroupe les noms des personnes de Genius HK dans celui de la France : Besoin de l'EBU
                If nomGroupe.Equals("GENIUS-FRN") Or nomGroupe.Equals("GENIUS-3G") Then
                    _ReturnList = session.CreateCriteria(GetType(Subscription)).Add(Restrictions.Eq("Id", nomGroupe)).Add(Restrictions.Eq("Id", "GENIUS HK")). _
                    List(Of Subscription)()
                Else
                    _ReturnList = session.CreateCriteria(GetType(Subscription)).Add(Restrictions.Eq("Id", nomGroupe)). _
                List(Of Subscription)()
                End If
 
                subscripber = New List(Of Subscripber)()
                For Each Client In _ReturnList
                    subscripber.Add(Client.ListeAbo)
                Next
                session.Close()
 
            Catch ex As Exception
                Throw ex
            End Try
            Return subscripber
        End Function
Comment puis-je résoudre ce problème ?

Merci à vous
playa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h21   #2
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 781
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 781
Points : 34 033
Points : 34 033
Quelle est la signature de la méthode Subscripber.Add ?

(soit dit en passant, c'est Subscriber, pas Subscripber )
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h38   #3
playa
Invité de passage
 
Inscription : mars 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 32
Points : 4
Points : 4
lol ok c'est noté
la signature de la méthode est :
Code :
Dim Subscripber As System.Collections.Generic.ICollection(of HPComVersion2.Bul.Entities.Subcripber)
playa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h43   #4
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 781
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 781
Points : 34 033
Points : 34 033
ah oui OK, en fait la déclaration était là mais j'avais mal lu...

Bah en fait tu essaies d'ajouter une collection à une collection, ça ne peut pas marcher... il faut faire une autre boucle :
Code :
1
2
3
4
5
6
 
                For Each Client In _ReturnList
                    For Each s In Client.ListeAbo
                        subscripber.Add(s)
                    Next
                Next
Par contre je ne comprends pas trop l'erreur... le type PersistentGenericSet n'est pas connu lors de la compilation donc je suppose que c'est une exception lors de l'exécution ? Mais pourtant le code que tu as montré ne devrait pas compiler (à moins peut-être que tu aies mis Option Strict Off ?)
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h47   #5
playa
Invité de passage
 
Inscription : mars 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 32
Points : 4
Points : 4
Hahaaa merci ca marche !
Pour ce qui est de l'option non elle est sur on
playa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h53   #6
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 781
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 781
Points : 34 033
Points : 34 033
Citation:
Envoyé par playa Voir le message
Hahaaa merci ca marche !
Pour ce qui est de l'option non elle est sur on
Et il te disait rien à la compilation ?
Pourtant la méthode Add attendait un Subscripber, et tu lui passait un ICollection(Of Subscripber)... ça aurait jamais du compiler
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h55   #7
playa
Invité de passage
 
Inscription : mars 2009
Messages : 32
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 32
Points : 4
Points : 4
Non rien du tout . Le debug ne m'a rien dit non plus
playa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 18h00   #8
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 781
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 17 781
Points : 34 033
Points : 34 033
je viens de vérifier... avec Option Strict Off, ce code compile sans problème et pète à l'exécution :

Code :
1
2
3
    Dim col1 As ICollection(Of Foo) = New List(Of Foo)
    Dim col2 As ICollection(Of Foo) = New List(Of Foo)
    col1.Add(col2)
(Foo étant une classe quelconque)

Avec Option Strict On, ça donne une erreur :

Citation:
Option Strict On interdit les conversions implicites de 'System.Collections.Generic.ICollection(Of ConsoleVB.Module1.Foo)' en 'ConsoleVB.Module1.Foo'
En gros Option Strict Off te permet de faire absolument n'importe quoi sans même te donner un avertissement... ce langage est encore plus pourri que je pensais
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h43.


 
 
 
 
Partenaires

Hébergement Web