Entity framework 实体框架-无法创建关联

Entity framework 实体框架-无法创建关联,entity-framework,Entity Framework,我的SQL数据库只有3个表。1称为Country,另一个称为CountryAlias,最后一个称为Person tblCounty和tblCountyAlias之间的关系是1对多,使用两者中的[Country]列作为相关列。那么国家和人之间的关系也是一样的。这个例子应该是相当经典的 我的问题是,EF似乎只希望我通过主键(或者我应该称之为实体键)进行关联。因此,我的问题是: 1) EF是否只希望我在实体的至少一侧使用实体键的情况下进行关联 2) 实体密钥是否与主键相同(即,将其从ID中删除并使国

我的SQL数据库只有3个表。1称为Country,另一个称为CountryAlias,最后一个称为Person

tblCounty和tblCountyAlias之间的关系是1对多,使用两者中的[Country]列作为相关列。那么国家和人之间的关系也是一样的。这个例子应该是相当经典的

我的问题是,EF似乎只希望我通过主键(或者我应该称之为实体键)进行关联。因此,我的问题是:

1) EF是否只希望我在实体的至少一侧使用实体键的情况下进行关联

2) 实体密钥是否与主键相同(即,将其从ID中删除并使国家/地区成为实体密钥是否安全)

3) 我是否按照英孚希望的方式战斗。学习WPF意味着战斗只会带来很多痛苦和失败,但我不确定这是否也适用于EF


首先,您没有指定使用哪种类型的实体框架,但是从上下文(实体键)来看,我猜您很可能使用的是代码优先类型(或者可能是模型优先)

要使您的关联正常工作,您的模型应该是这样的:

如您所见,使用字符串类型主键并不违反实体框架的任何规则。(我在Person表中包含了一个Id,因为一个人的名字可能不是唯一的)

根据我的经验,答案是:

1) 当您在MSSQL中创建一个1对多的外键时,第一方(在本例中为TBLContry)列必须是唯一的。看见 所以基本上它不必是主键,但是使用主键要容易得多。但该主键可以映射到字符串属性,也可以映射到多个属性(请参见复合主键)

2) 是的,它是相同的,我假设Country列映射到一个字符串属性,该属性可以是唯一的,因此将其用作实体键是完全安全的

3) 不,你并不是在打仗,即使你是,我认为人们也应该和API打一场仗,了解它的局限性和特点

我希望这有帮助

顺便说一下,在模型中创建新实体时(在模型中单击鼠标右键并添加新选项),可以选择所需的实体键,如下所示:


为什么不使用tblcontry.Id连接表?因为该Id当前仅用于安抚SQL,所以它对我的设计没有实际价值。然而,在进一步阅读之后,我意识到使用FK无法做到这一点(至少不容易做到),因此,我将进行更新,以便它可以使用ID-这感觉就像我被迫在Linq到Sql甚至旧ADO.Net不会有这个问题的地方(我想这是每种技术的优缺点)