假设我在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)。关联的映射详细信息如下:

-协会
-映射到PersonModelScore
-ModelScore
ModelId:Int32 ModelId:int
得分:Int32 得分:int
-人
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).
我在设计器中做了什么错误或其他错误,如何解决该错误?

非常感谢!

最佳答案

在您提出问题的最后时刻,我遇到了同样的问题,并发现 Entity Framework 设计人员已将我的“ScoreId”列(相对于PersonModelScore表)标识为主键列。我将我的ScoreId的设置更改为false,之后一切正常。

关于entity-framework - 如何消除错误3002?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2835928/

10-09 06:40