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 :

Insérer dans une table


Sujet :

NHibernate

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut Insérer dans une table
    Bonjour

    Voilà, j'ai un problème en ce moment pour insérer des données dans une table.

    Je veux insérer dans la table EtudiantsLogiciels

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE [dbo].[EtudiantsLogiciels](
    	[codePermanent] [char](12) NOT NULL,
    	[noLogiciel] [int] NOT NULL,
    	[clefPortfolio] [char](15) NULL,
    	[version] [varchar](500) NOT NULL,
     CONSTRAINT [PK_EtudiantsLogiciels] PRIMARY KEY CLUSTERED 
    (
    	[codePermanent] ASC,
    	[noLogiciel] ASC
    Le problème est que la clé primaire codePermanent n'est pas relié à une autre table. Je veux quand même insérer en settant une valeur.

    Erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object references an unsaved transient instance - save the transient instance before flushing. Type: ePortfolio.Data.Portfolio.Portfolio, Entity: ePortfolio.Data.Portfolio.Portfolio
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         Public Sub New()
                Table("EtudiantsLogiciels")
                CompositeId().KeyReference(Function(x) x.Logiciel, "noLogiciel").KeyReference(Function(x) x.Portfolio, "codePermanent")
                'References(Function(x) x.Logiciel, "noLogiciel")
                'References(Function(x) x.Portfolio, "codePermanent")
                Map(Function(x) x.Version, "version")
            End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            Public Sub New()
                Table("portfolios")
                Id(Function(c) c.ClefPortfolio, "clefPortfolio")
                Map(Function(c) c.CodeNDS, "codeNDS")
                Map(Function(c) c.CodePermanent, "codePermanent")
                Map(Function(c) c.EstValide, "estValide")
                Map(Function(c) c.DateValidee, "dateValidee")
                Map(Function(c) c.EstAnglais, "estAnglais")
                Map(Function(c) c.NoTypePortfolio, "noTypePortfolio")
            End Sub

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Je ne comprend pas pourquoi, mais avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CompositeId().KeyReference(Function(x) x.Logiciel, "noLogiciel").KeyReference(Function(x) x.Portfolio, "codePermanent")
    Il veut insérer 2 lignes dans la base de donnée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO EtudiantsLogiciels (version, noLogiciel, codePermanent) VALUES (@p0, @p1, @p2);@p0 = '' [Type: String (4000)], @p1 = 12 [Type: Int32 (0)], @p2 = 'vlddK25K4mDh7Tc' [Type: String (4000)]
    Cette ligne ne devrait pas être ajouté. Est-ce que il y a possibilité de l'ignorer ?

    Puisque que la valeur qui ajoute 'vlddK25K4mDh7Tc' est une clefPortfolio et non un codePermanent.

    Merci

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Sinon avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      Public Sub New()
                Table("EtudiantsLogiciels")
                CompositeId().KeyReference(Function(x) x.Logiciel, "noLogiciel")
                Map(Function(x) x.Version, "version")
                References(Function(x) x.Portfolio).PropertyRef(Function(x) x.CodePermanent).Column("codePermanent").Cascade.SaveUpdate()
     
     
            End Sub

    Pourtant, ça me semble bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NHibernate.Type.StringType - binding '' to parameter: 0
    [2012-08-03 16:59:00,218] DEBUG [12] NHibernate.Type.StringType - binding 'GINE26038905' to parameter: 1
    [2012-08-03 16:59:00,218] DEBUG [12] NHibernate.Type.Int32Type - binding '12' to parameter: 2
    [2012-08-03 16:59:00,219] DEBUG [12] NHibernate.SQL - INSERT INTO EtudiantsLogiciels (version, codePermanent, noLogiciel) VALUES (@p0, @p1, @p2);@p0 = '' [Type: String (4000)], @p1 = 'GINE26038905' [Type: String (4000)], @p2 = 12 [Type: Int32 (0)]
    Erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unexpected row count: 13; expected: 1
    Je ne sais plus quoi faire

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/08/2009, 11h59
  2. [MySQL] Comment insérer dans une table des données générées dynamiquement
    Par methodman225 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/04/2008, 11h50
  3. Comment insérer dans une table?
    Par souminet dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/01/2008, 14h28
  4. Insérer dans une table des donnees formatées
    Par lothar59 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2006, 18h35
  5. Réponses: 3
    Dernier message: 23/04/2006, 12h14

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