說我有如下表定義的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具有定義中包含的特定「含義」。沒有什麼驚天動地的。
現在,我嘗試使用設計轉化爲實體框架這一點。在從數據庫更新模型並進行一些編輯之後,我有一個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值具有主鍵的符號,但得分值不。
在編譯時,我得到:
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).
我做了什麼錯在設計或以其他方式,以及如何修正這個錯誤?
非常感謝!
你應該接受Shan的答案。這是正確的,並保存我的培根。 – 2014-05-21 13:53:39