假设我在 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 具有特定的“含义”,它包含在定义中。那里没有什么惊天动地的事情。
现在,我尝试使用设计器将其转换为实体框架。从数据库更新模型并进行一些编辑后,我有一个 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).
我在设计器或其他方面做错了什么,如何修复错误?
非常感谢!