我如何消除错误3002?

假设我在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具有定义中包含的特定“含义”。 没有什么惊天动地的。

现在,我尝试使用devise器将其转换为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).

我在devise师或其他方面做了什么错误,我该如何解决这个错误?

非常感谢!

对于你的问题,迟到了,我遇到了同样的问题,并发现entity frameworkdevise者已经将我的“ScoreId”列(相对于PersonModelScore表)作为主键列。 我将ScoreId的设置更改为false,之后都运行良好。

您可以在实体中设置单个主键,以避免此错误。右键单击实体中字段的标量属性,如果主键很多,则禁用实体键。

您应该为每个表创build一个身份密钥。

ModelScore应该有一个ModelScoreId,PersonModelScore应该有一个PersonModelScoreId。

表之间的引用应该是单个字段。

您的PersonModelScore表应该定义一个身份和主键的Id列,那么您应该在PersonId,ModelId上创build一个唯一的键

至于错误3002,我有同样的问题所有我的领域已被EF标记实体的关键

“转到您的.edmx文件,右键单击背景并select”映射详细信息“。单击需要编辑.edmx窗口中的映射的表格,详细信息应显示在新的”映射详细信息“窗口中。打开属性选项卡(点击F4打开“属性”,如果不打开)单击“映射详细信息”中的“值/属性”来更改显示的属性,并从属性窗口中现在可以设置“实体键'价值'假' – 克里斯·佩顿14年14月14日在18:54“

这对我工作 – 谢谢这是现在使用EF数据库优先我的工作stream程的一部分。 我们有一个任务来更新数据模型。