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

Linq Discussion :

Scope Entity sur Linq


Sujet :

Linq

  1. #1
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut Scope Entity sur Linq
    Bonjour,

    J'ai une table avec id (int) incrémentable automatiquement
    Je souhaiterai savoir comment faire pour connaître la prochaine clé

    Pour le moment j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    From Conf In LesDatas.Configurations Select Conf.IdConf).Max + 1
    Mais ily a un problème quand je supprime le dernier enregistrement ... ça me décale.

    Par exemple je créé enregistrement 8, je le supprime.
    Je demande NewId = 8 alors qu'en base se sera 9
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    En principe il suffit d'insérer ton objet, et une fois la sauvegarde effectuée, tu récupères son ID.

    Donc si tu veux connaître l'ID en avance, peut-être que tu dois enregistrer ton objet un peu plus tôt afin d'avoir cette information non ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    J'y ai pensé, mais là je suis dans une situation où il faut que j'enregistre un fichier avec le nom = Id et que je valide mon enregistrement que si mon fichier est bien enregistré
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Et si tu procèdes comme ceci ?
    - Enregistre ton objet en base afin de "bloquer" un ID
    - Enregistre ton fichier
    --- Si l'enregistrement du fichier échoue, tu supprimes l'objet que tu as enregistré au préalable
    --- Si l'enregistrement du fichier s'effectue correctement, tu laisses l'objet en base
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    C'est une solution, mais c'est pas très propre

    Sur ici
    Je vois faudrait utiliser SELECT IDENT_CURRENT(<TableName>) en passant par une procédure stockée.

    Linq n'a pas cette fonction nativement?
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Non nativement ça n'existe pas. Comme tu l'as vu dans le lien que tu as indiqué, il faut passer par la procédure stockée.

    Mais au niveau de la logique de ton programme ce n'est pas très net, puisque tu veux utiliser une donnée que tu n'as pas encore en ta possession. As-tu pensé à la concurrence ? Tu vas forcément avoir des soucis puisque tu ne "réserves" par les ID au fur et à mesure, d'où la solution que je t'ai proposé.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    c'est une interfac ed'admin, qui sera utiliser par une personne
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok dans ce cas, la procédure stockée sera sûrement ta meilleure alliée mais si demain il y a deux utilisateurs ou plus, il faudra garder à l'esprit qu'il y aura un risque
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Août 2011
    Messages : 14
    Points : 24
    Points
    24
    Par défaut
    Au pire quand il aura plusieurs users, il pourra au choix, locker la table pour éviter qu'un autre utilisateur écrive dessus, mettre un lock/mutex/semaphore sur la méthode ou encore ecrire la data directement récupérer son id et faire un update
    Je suis plutôt adepte du mutex dans ce cas

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par BROWNY Voir le message
    C'est une solution, mais c'est pas très propre

    Sur ici
    Je vois faudrait utiliser SELECT IDENT_CURRENT(<TableName>) en passant par une procédure stockée.
    Cette solution pose un problème si deux utilisateurs font appel au même moment à cela.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  11. #11
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par BROWNY Voir le message

    Par exemple je créé enregistrement 8, je le supprime.
    Je demande NewId = 8 alors qu'en base se sera 9
    Réinitialiser le seed de l'IDENTITY dans ce cas.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  12. #12
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    Comment on fait ça ?
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  13. #13
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Public Shared Function GetLastEntity(ByVal NameTable As String, ByVal LesDatas As CatalogueMobilierEntities) As Integer
            Dim Result As Integer = 0
            Dim str As String = "SELECT IDENT_CURRENT ({0}) AS Current_Identity;"
     
            Dim t = LesDatas.ExecuteStoreQuery(Of Decimal)(str, NameTable)
            Return Convert.ToInt32(t(0))
     
        End Function
    ça c'est le code que j'utilise

    et l'appel
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NewCouleur As New Couleur
                        NewCouleur.IdCouleur = Helper.GetLastEntity(NewCouleur.GetType.Name, LesDatas) + 1
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quels sont les meilleurs livres sur Linq ?
    Par Invité dans le forum Linq
    Réponses: 13
    Dernier message: 18/12/2013, 08h37
  2. EJB entity sur une table sans clé
    Par omekiane dans le forum JPA
    Réponses: 0
    Dernier message: 03/12/2008, 08h23
  3. Help sur linq sql
    Par alves.seb dans le forum Accès aux données
    Réponses: 6
    Dernier message: 28/08/2008, 16h16
  4. Problème de référence d'Entity sur 2 projets EJB
    Par OButterlin dans le forum JPA
    Réponses: 2
    Dernier message: 29/04/2008, 20h48
  5. Objet Entity sur VB ( VBA excel )
    Par elfette dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/06/2007, 12h22

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