IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NHibernate Discussion :

[Nhibernate] Impossible d'effectuer un cast d'un objet de type 'NHibernate.Collection.Generic.PersistentGeneri


Sujet :

NHibernate

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 25
    Points
    25
    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
    Impossible d'effectuer un cast d'un objet de type 'NHibernate.Collection.Generic.PersistentGenericSet`
    Mon mapping "subcription"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Quelle est la signature de la méthode Subscripber.Add ?

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

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    lol ok c'est noté
    la signature de la méthode est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Subscripber As System.Collections.Generic.ICollection(of HPComVersion2.Bul.Entities.Subcripber)

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Hahaaa merci ca marche !
    Pour ce qui est de l'option non elle est sur on

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Non rien du tout . Le debug ne m'a rien dit non plus

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    je viens de vérifier... avec Option Strict Off, ce code compile sans problème et pète à l'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/09/2014, 22h12
  2. Réponses: 12
    Dernier message: 18/03/2014, 10h42
  3. Réponses: 4
    Dernier message: 10/05/2011, 11h55
  4. Réponses: 0
    Dernier message: 13/03/2010, 10h25
  5. Réponses: 2
    Dernier message: 06/03/2007, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo