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

C# Discussion :

Comment relier 2 tables sur des colonnes qui ne sont pas des clés primaires [Débutant]


Sujet :

C#

  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 Comment relier 2 tables sur des colonnes qui ne sont pas des clés primaires
    Bonjour,

    Je me suis lancé dans le code First en C#.
    J'ai 2 entité : Frais et Attachment. Attachment contient toutes les pièces jointes des frais mais aussi d'autres tables. J'ai fais une Interface pour obliger tous les objets nécessitant un atachment d'avoir une propriété idOwner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class fee
    {
         public int id { get; set; }
         public Guid ownerID { get; set; }//My ForeignKey
         [ForeignKey("ownerID")]
         public virtual ICollection<attachement> Attachements { get; set; }
    }
     public class attachement 
    {
        public int id { get; set; }
        public Guid parentId { get; set; }//Other part of link
    }
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
          modelBuilder.Entity<attachement>().ToTable("attachement");
           modelBuilder.Entity<fee>().ToTable("frais").HasMany(dep => dep.Attachements).WithOptional().Map(t => t.MapKey("parentId"));
    }
    quand je fais add-migration:
    The ForeignKeyAttribute on property 'Attachements' on type 'fee' is not valid. The foreign key name 'ownerID' was not found on the dependent type 'attachement'. The Name value should be a comma separated list of foreign key property names.
    J'ai fais plein d'essai dans tous les sens, mais visiblement pas le bon ...
    Je précise qu'un fee peut avoir plusieurs attachment mais qu'un attachment ne peut être qu'un objet (Fee si les ownerID=parentid )
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Je n'ai pas tout compris, mais une Fee peut avoir [0,n] Attachment et qu'un Attachment appartient a [1,1] Fee, alors Attachment a une foreign key FeeId pour savoir à qui il est rattaché. La class Fee possède bien une collection d'Attachment, mais cela n'existe que pour le code C# ; la table correspondante dans la base n'a pas de AttachmentId ou similaire.

  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
    Une fee à bien [0,n] attachment mais attachment peut correspondre [0,1] fee. Le seul lien est un guid qui n'est pas primaryKey fee.ownerId/attachment.IdParent. Mais apparement en EF6; il n'y a pas cette notion ni de alternatekey... j'ai peur d'être dans une impasse. Du coup avec un jeu d'Interface, je me passe mon context et au lieu de caster un formulaire (dynamic)Formulaire qui allez me chercher les bons formulaire je caste mon helper dans FeeQueries ce qui me permet d'utiliser le context
    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. [WM24] Comment trier une table sur plusieurs colonnes sous Android ?
    Par lololebricoleur dans le forum Windev Mobile
    Réponses: 13
    Dernier message: 16/04/2020, 02h27
  2. Réponses: 0
    Dernier message: 10/12/2019, 18h37
  3. Index sur une colonne qui n'existe pas
    Par olivier] dans le forum Oracle
    Réponses: 5
    Dernier message: 08/10/2015, 13h16
  4. [SP-2007] Comment déployer un workflow sur un serveur qui n'a pas visual studio ?
    Par glucas59 dans le forum SharePoint
    Réponses: 3
    Dernier message: 20/07/2009, 13h45
  5. Réponses: 5
    Dernier message: 25/04/2006, 11h14

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