说我有如下表定义的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