Скажем, у меня есть следующие определения таблицы в SQL Server 2008:Как устранить ошибку 3002?
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 имеет особое «значение», которое содержится в определении. Там нет ничего разрушительного.
Теперь я попытаюсь перевести это в Entity Framework с помощью конструктора. После обновления модели из базы данных и выполнения некоторого редактирования у меня есть объект Person, объект Model и объект ModelScore. PersonModelScore, являющийся таблицей соединений, не является объектом, а скорее включается как ассоциация с каким-либо другим именем (например, ModelScorePersonAssociation). Детали отображения для ассоциации являются следующими:
- Association - Maps to PersonModelScore - ModelScore ModelId : Int32 <=> ModelId : int Score : Int32 <=> Score : int - Person PersonId : Int32 <=> PersonId : int
С правой стороны, значение ModelID и PersonId имеют первичные ключевые символы, но значение Score нет.
После компиляции, я получаю:
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).
Что я сделал неправильно в конструкторе или иначе, и как я могу исправить ошибку?
Большое спасибо!
Вы должны принять ответ Шаня. Это правильно и спасло мою бекон. –