Comment puis-je éliminer l'erreur 3002?

.net-3.5 entity-framework linq-to-entities sql-server-2008

Question

Disons que j'ai les définitions de table suivantes dans SQL Server 2008:

CREATE TABLE Person
(PersonId INT IDENTITY NOT NULL PRIMARY KEY,
 Name VARCHAR(50) NOT NULL,
 ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL)

CREATE TABLE Model
(ModelId INT IDENTITY NOT NULL PRIMARY KEY,
 ModelName VARCHAR(50) NOT NULL,
 Description VARCHAR(200) NULL)

CREATE TABLE ModelScore
(ModelId INT NOT NULL REFERENCES Model (ModelId),
 Score INT NOT NULL,
 Definition VARCHAR(100) NULL,
 PRIMARY KEY (ModelId, Score))

CREATE TABLE PersonModelScore
(PersonId INT NOT NULL REFERENCES Person (PersonId),
 ModelId INT NOT NULL,
 Score INT NOT NULL,
 PRIMARY KEY (PersonId, ModelId),
 FOREIGN KEY (ModelId, Score) REFERENCES ModelScore (ModelId, Score))

L'idée ici est que chaque personne ne peut avoir qu'un seul ModelScore, mais chaque personne peut avoir un score pour un nombre quelconque de modèles définis. Autant que je sache, ce SQL devrait appliquer ces contraintes naturellement. Le ModelScore a un "sens" particulier, contenu dans la définition. Rien ne brise la terre là-bas.

Maintenant, j'essaie de traduire cela dans Entity Framework à l'aide du concepteur. Après avoir mis à jour le modèle à partir de la base de données et apporté quelques modifications, je dispose d’un objet Personne, d’un objet Modèle et d’un objet ModelScore. PersonModelScore, étant une table de jointure, n'est pas un objet mais est plutôt inclus en tant qu'association avec un autre nom (disons ModelScorePersonAssociation). Les détails de mappage pour l'association sont les suivants:

- Association
  - Maps to PersonModelScore
    - ModelScore
        ModelId : Int32       <=>  ModelId : int
        Score : Int32         <=>  Score : int
    - Person
        PersonId : Int32      <=>  PersonId : int

Sur le côté droit, les valeurs ModelId et PersonId ont des symboles de clé primaire, mais pas la valeur Score.

Lors de la compilation, je reçois:

Error 3002: Problem in Mapping Fragment starting at line 5190: Potential runtime violation of table PersonModelScore's keys (PersonModelScore.ModelId, PersonModelScore.PersonId): Columns (PersonModelScore.PersonId, PersonModelScore.ModelId) are mapped to EntitySet ModelScorePersonAssociation's properties (ModelScorePersonAssociation.Person.PersonId, ModelScorePersonAssociation.ModelScore.ModelId) on the conceptual side but they do not form the EntitySet's key properties (ModelScorePersonAssociation.ModelScore.ModelId, ModelScorePersonAssociation.ModelScore.Score, ModelScorePersonAssociation.Person.PersonId).

Qu'est-ce que j'ai mal fait chez le concepteur ou autrement, et comment puis-je corriger l'erreur?

Merci beaucoup!

Réponse populaire

Très tard pour votre question, j'avais le même problème et j'ai découvert que le concepteur de la structure d'entité avait identifié ma colonne "ScoreId" (relative à votre table PersonModelScore) en tant que colonne de clé primaire. J'ai changé mon paramètre en faux pour mon ScoreId et tout a bien fonctionné par la suite.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow