Допустим, у меня есть следующие определения таблиц в 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 имеет особое «значение», которое содержится в определении. Там нет ничего потрясающего.
Теперь я пытаюсь перевести это в Entity Framework с помощью дизайнера. После обновления модели из базы данных и некоторого редактирования у меня есть объект Person, объект Model и объект ModelScore. PersonModelScore, будучи таблицей соединений, не является объектом, а включается в качестве ассоциации с другим именем (скажем, ModelScorePersonAssociation). Подробности сопоставления для ассоциации следующие:
- <b>Association</b>
- 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).
Что я сделал не так в конструкторе или как-то иначе, и как я могу исправить ошибку?
Большое спасибо!