J'ai une classe de base Participants hérités par Artist, Author et TextWriter. Je n'ai qu'une seule table dans le magasin de données: participants { ID, FirstName, LastName, IsArtist, IsAuthor, IsTextWriter, } L'idée est d'avoir une classe pour tous les rôles qu'un participant peut avoir.ADO.NET Entity Framework: Puis-je avoir plusieurs types d'entités pour la même ligne?
J'ai réussi à créer le fichier edmx mais lorsque je tente d'obtenir un participant (comme Artiste) qui est aussi un auteur que je reçois l'erreur suivante:
All objects in the EntitySet 'Participants' must have unique primary keys. However, an instance of type 'Artist' and an instance of type 'Author' both have the same primary key value, 'EntitySet=Participants;ID=1'.
Merci
J'ai fait une table par hiérarchie mais si par exemple j'ai une ligne participant avec les valeurs suivantes: ID: 1, Prénom: "Nom1", IsArtist: Vrai, IsAuthor: Vrai, IsTextWrite: Faux Lorsque j'essaie de: var artiste = ctx.Participants.OfType() .Où (a => a.ID == 2) .FirstOrDefault(); var author = ctx.Participants.OfType () .Où (a => a.ID == 2) .FirstOrDefault(); Je reçois l'erreur de la question. –
Aucune entité ne peut avoir deux types concrets. C'est OOD de base. Si un «Participant» peut être à la fois «Artiste» et «Auteur», alors «Artiste» et «Auteur» doivent avoir une relation de sous-type avec l'autre ou vous devez utiliser l'agrégation plutôt que l'héritage pour lier «Participant» avec « Artist' et 'Author'. Une instance d'un objet ne peut avoir qu'un seul type concret; cela ne change pas parce que vous le stockez dans la base de données. –
Tout ce dont j'ai besoin, c'est d'avoir des classes Artist, Author qui persistent sur la même ligne dans la base de données. La table est comme ceci: Table {ID, Prénom, Nom, IsArtist, IsAuthor} et pour pouvoir interroger ces classes. –