Как я устраняю Ошибку 3002?

Скажите, что у меня есть определения следующей таблицы в 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))

Идея здесь состоит в том, что у каждого Человека может быть только один ModelScore на Модель, но у каждого Человека может быть счет к любому количеству определенных Моделей. Насколько я могу сказать, этот SQL должен осуществить эти ограничения естественно. ModelScore имеет конкретное "значение", которое содержится в Определении. Ничто важнейшее там.

Теперь, я пытаюсь перевести это в Платформу Объекта с помощью разработчика. После обновления модели от базы данных и выполнения некоторого редактирования, я сделал, чтобы Человек возразил, Объект модели и объект ModelScore. PersonModelScore, будучи объединяющей таблицей, не является объектом, а скорее включен как связь с некоторым другим именем (скажем, ModelScorePersonAssociation). Отображающиеся детали для ассоциации следующие:

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

На правой стороне значения ModelId и PersonId имеют символы первичного ключа, но значение Счета не делает.

После компиляции я добираюсь:

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

Что я сделал неправильно в разработчике или иначе, и как я могу зафиксировать ошибку?

Большое спасибо!

41
задан Andrew 14 May 2010 в 16:41
поделиться

1 ответ

Вы должны создать один ключ Identity для каждой таблицы.

ModelScore должен иметь ModelScoreId, PersonModelScore должен иметь PersonModelScoreId.

Ссылки между таблицами должны быть одним полем.

2
ответ дан 27 November 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: