And*_*rew 41 linq-to-entities entity-framework .net-3.5 sql-server-2008
假设我在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))
Run Code Online (Sandbox Code Playgroud)
这里的想法是每个人每个模型可能只有一个ModelScore,但每个Person可能有任意数量的已定义模型的分数.据我所知,这个SQL应该自然地强制执行这些约束.ModelScore具有特定的"含义",它包含在定义中.那里什么都没有惊天动地.
现在,我尝试使用设计器将其转换为Entity Framework.在从数据库更新模型并进行一些编辑之后,我有一个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).
我在设计器或其他方面做错了什么,如何修复错误?
非常感谢!
Sha*_*rde 65
很晚了你的问题,我有同样的问题,并发现实体框架设计者已经确定了我的"ScoreId"列(相对于你PersonModelScore表)作为主键列.我将ScoreId的设置更改为false,之后一切运行良好.
您应该为每个表创建一个身份键。
ModelScore 应该有一个 ModelScoreId,PersonModelScore 应该有一个 PersonModelScoreId。
表之间的引用应该是单个字段。
| 归档时间: |
|
| 查看次数: |
20697 次 |
| 最近记录: |