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

Entity Framework Discussion :

[VB.NET] Entity Framework sans PK null


Sujet :

Entity Framework

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut [VB.NET] Entity Framework sans PK null
    Bonjour,

    J'ai un problème avec l'entité framework. Ma clé primaire doit absolument permettre des valeurs nulles, les entités se génèrent parfaitement par contre lors de la compilation j'ai une erreur comme quoi ma clé primaire ne doit pas permettre les valeurs nulles.

    Comment faire pour passer par dessus cette erreur ?

    Ma bd est une bd Oracle.

    Merci

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Il faudrait préciser ton besoin, car une clé primaire ne peut par définition pas être nulle.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Me semble qu'EF interdit les clé primaires nulles.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Arnard Voir le message
    Me semble qu'EF interdit les clé primaires nulles.
    EF n'a pas grand chose à voir la dedans.

    Les SGBD (en tous cas Sql Server) n'admettent pas en général (et heureusement !!!!) de PK nulle.

    Cette demande est plus que bizarre : par définition cela n'a aucun sens de vouloir une PK nulle.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par tito55 Voir le message
    Comment faire pour passer par dessus cette erreur ?
    Il n'y pas d'erreur, ou plutôt si, mais du coté de ta conception.

    Pour la corriger : faire une conception correcte et ne pas attendre de la part du DBMS qu'il se soumette à une conception de schéma baroque.

    Une clef primaire est avant tout une notion technique (donc sa nullité n'a pas de sens), même si souvent elle est utilisée aussi comme notion métier (alors que les deux concepts devraient normalement être disjoints).

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Effectivement si ta clé primaire peut être null il y a une erreur de conception.

    Le mix de l'utilisation "technique-métier" des clés primaires est à mon avis une bonne chose (je trouve que ça permet de rendre la modélisation et certains bout de code plus parlant Exemple les findByPrimaryKeys généré dans les datasets), néanmoins ça peut apporter beaucoup de complications après coup qui peuvent être extrêmement couteuse si la conception a des lacunes.

    En cas d'expérience insuffisante dans l'exercice de la conception, il est préférable d'utiliser systématiquement un champ numériques spécifique, non modifiable, avec incrémentation auto, qui ne sera jamais affiché sur l'écran de l'utilisateur pour les clé primaire.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par sinople Voir le message
    Effectivement si ta clé primaire peut être null il y a une erreur de conception.
    Tout à fait !

    Le mix de l'utilisation "technique-métier" des clés primaires est à mon avis une bonne chose (je trouve que ça permet de rendre la modélisation et certains bout de code plus parlant Exemple les findByPrimaryKeys généré dans les datasets), néanmoins ça peut apporter beaucoup de complications après coup qui peuvent être extrêmement couteuse si la conception a des lacunes.
    Plus ou moins d'accord. (plutot moins que plus )

    En cas d'expérience insuffisante dans l'exercice de la conception, il est préférable d'utiliser systématiquement un champ numériques spécifique, non modifiable, avec incrémentation auto, qui ne sera jamais affiché sur l'écran de l'utilisateur pour les clé primaire.
    Je ne suis pas d'accord (du tout) avec toi sur ce point : pour ma part, les champs à incrémentation auto doivent être réservés à une utilisation "métier" (N° de commande devant apparaitre sur le BC, ,N° de client sur facture, etc ...)
    En revanche, si le champ est là uniqiuement pour assurer l'unicité, il me semble bien préférable d'utilise un uniqueidentifier, qui sera la PK.

    Cela a au moins deux avantages :

    - Si l'application doit travailler un jour en mode déconnecté (cas type embarquée sur le portable d'un commercial), la fusion des données avec la base centrale s'effectue sans pleurs ni grincement de dents

    - un objet peut être complet avec son identitifiant unique avant de passer par la case "persistence SGBD" (quand on y pense, ce n'est pas le taf du SGBD d'attribuer des caractéristiques à un objet).

  8. #8
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    C'est vrai qu'un bon vieux GUID est ce qu'il y a de plus efficace pour générer une clé primaire (et que la gestion des auto-incrément en déconnecté est une vrai saloperie).

    Après l'autoincrémentation sur les données métiers c'est rarement un bon truc car le "métier" aime souvent introduire un mix de donnée significative + compteur (Ex année + département (ou vendeur) + compteur), enfin ça c'est les gout et les couleurs de la couche métier...

    Mais je maintient quand même que si la conception est "blindée et rigide" il est plus propre d'avoir un couple de champs significatif pour la clé primaire plutôt qu'une champ "bidon" en tant que clé primaire et d'ajouter des contraintes d'unicité supplémentaire ailleurs.

    Je suis conscient qu'il y a suffisament d'arguments valables des 2 cotés pour se prendre le chou pendant un bout temps...

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut Clé primaire vraiment nullable
    Ok il manque surement quelques détails dans mon explication. Ma clé primaire est vraiment nullable car avec ArcGis, lors de la manipulation de donnée(versionnage) il faut que les clés soient nullable et c'est possible de le faire en Oracle. Ok ce n'est pas la meilleure facon mais dans la nouvelle version, ca devrait se corriger.

    En prenant cela en compte, il m'est impossible de créer mon entity ?

  10. #10
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par tito55 Voir le message
    Ok il manque surement quelques détails dans mon explication. Ma clé primaire est vraiment nullable car avec ArcGis, lors de la manipulation de donnée(versionnage) il faut que les clés soient nullable et c'est possible de le faire en Oracle. Ok ce n'est pas la meilleure facon mais dans la nouvelle version, ca devrait se corriger.

    En prenant cela en compte, il m'est impossible de créer mon entity ?
    NON NON NON NON
    Aucun SGBD ne te permettera de faire une clef primaire nullable, ni Oracle, ni SQL Server, ni Sybase, ni MySQL. Si t'en vois un, jette le!

    Voici la référence Oracle : http://download.oracle.com/docs/cd/A...nteg.htm#11342

    Citation Envoyé par Reference Oracle
    PRIMARY KEY Integrity Constraints
    Each table in the database can have at most one PRIMARY KEY constraint. The values in the group of one or more columns subject to this constraint constitute the unique identifier of the row. In effect, each row is named by its primary key values.

    The Oracle implementation of the PRIMARY KEY integrity constraint guarantees that both of the following are true:

    No two rows of a table have duplicate values in the specified column or set of columns.
    The primary key columns do not allow nulls. That is, a value must exist for the primary key columns in each row.

  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 : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par sinople Voir le message
    Je suis conscient qu'il y a suffisament d'arguments valables des 2 cotés pour se prendre le chou pendant un bout temps...
    Certes

    Ceci dit c'est un vrai sujet de discussion qui mérite débat et qui vaudrait presque le coup d'ouvrir un fil dans le forum "base de données" ou "géneral développement" (pour pas continuer à polluer le fil de tito55 qui semble tenir à ses PK nulles )

  12. #12
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    D'un autre coté il y a la réponse au premier post du topic aussi

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par sinople Voir le message
    D'un autre coté il y a la réponse au premier post du topic aussi
    C'est pas faux.

  14. #14
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    C'est pas faux.
    Ah nan je proteste! Je veux la capture d'écran de la PK nulle! Y'a le DBA Oracle de l'année là où je travaille, faut que je lui montre ca

  15. #15
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    NON NON NON NON
    Aucun SGBD ne te permettera de faire une clef primaire nullable, ni Oracle, ni SQL Server, ni Sybase, ni MySQL. Si t'en vois un, jette le!
    Pour le versionnage avec ArcGis, tous les tables ont une clés nullable avec Oracle.

    Par contre dans mon cas, je pouvais modifier pour la mettre nulle et avec Toad j'ai eu une erreur comme quoi je ne pouvais pas changer non-nullable par non-nullable comme s'il ne voyait pas l'option nullable mais prenait pour acquis que la clé primaire était implicitement non-nullable, j'ai du désactiver la clé primaire, la mettre non-nullable et réactiver la clé.

    En résumé, c'est possible de mettre une clé primaire nullable en Oracle par contre je ne jetterai pas Oracle

  16. #16
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    Par défaut
    ca fait peur ce qu'on lit ici
    utiliser un truc qui requiert des clés nullable c'est à mettre à la poubelle !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par tito55 Voir le message
    Pour le versionnage avec ArcGis, tous les tables ont une clés nullable avec Oracle.

    Par contre dans mon cas, je pouvais modifier pour la mettre nulle et avec Toad j'ai eu une erreur comme quoi je ne pouvais pas changer non-nullable par non-nullable comme s'il ne voyait pas l'option nullable mais prenait pour acquis que la clé primaire était implicitement non-nullable, j'ai du désactiver la clé primaire, la mettre non-nullable et réactiver la clé.

    En résumé, c'est possible de mettre une clé primaire nullable en Oracle par contre je ne jetterai pas Oracle
    Oui mais jette ArcGis
    Non mais plus sérieusement, peux tu nous faire une capture d'écran de la table sous toad? C'est pas pour être lourd mais je vois pas comment c'est possible... C'est définitivement impossible!
    Et surtout fait un DESC de ta table (ca te permet d'avoir la description de celle ci). Il semblerait qu'il y'ait un bug sous TOAD (à ce que j'ai lu sur un forum)

Discussions similaires

  1. ASP.NET Entities Framework Security Exception
    Par didithewarrior dans le forum ASP.NET
    Réponses: 8
    Dernier message: 17/11/2010, 08h32
  2. vb.net entity framework et cast
    Par fred19732 dans le forum VB.NET
    Réponses: 0
    Dernier message: 27/08/2010, 11h48
  3. ADO.NET Entity Framework many to many
    Par tomglouden dans le forum Framework .NET
    Réponses: 3
    Dernier message: 05/11/2009, 10h52
  4. ADO.NET Entity Framework, Astoria, Silverlight -> .NET 3.5 ?
    Par rad_hass dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/07/2008, 16h01
  5. [ADO.NET Entity Framework] génération des tables
    Par anthyme dans le forum Accès aux données
    Réponses: 3
    Dernier message: 22/02/2008, 17h44

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