Wie behebe ich den Fehler 3002?

Sagen Sie, ich habe die folgenden Tabellendefinitionen in 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))

Die Idee hier ist, dass jede Person nur einen ModelScore pro Model haben kann, aber jede Person kann eine Punktzahl für eine beliebige Anzahl definierter Models haben. Soweit ich das beurteilen kann, sollte diese SQL diese Einschränkungen auf natürliche Weise durchsetzen. Der ModelScore hat eine bestimmte "Bedeutung", die in der Definition enthalten ist. Nichts Erderschütterndes.

Jetzt versuche ich, dies mit dem Designer in Entity Framework zu übersetzen. Nachdem ich das Modell aus der Datenbank aktualisiert und einige Bearbeitungen vorgenommen habe, habe ich ein Person-Objekt, ein Model-Objekt und ein ModelScore-Objekt. PersonModelScore ist als Join-Tabelle kein Objekt, sondern wird als Verknüpfung mit einem anderen Namen eingefügt (sagen wir, ModelScorePersonAssociation). Die Zuordnungsdetails für die Zuordnung lauten wie folgt:

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

Auf der rechten Seite haben die Werte ModelId und PersonId Primärschlüsselsymbole, der Wert Score jedoch nicht.

eim Kompilieren erhalte ich:

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).

Was habe ich im Designer oder auf andere Weise falsch gemacht und wie kann ich den Fehler beheben?

Danke vielmals

Antworten auf die Frage(10)

Ihre Antwort auf die Frage