我的SQL数据库只有3个表。 1被称为Country,另一个被称为CountryAlias,最后一个被称为Person。
使用两者中的[Country]列作为相关列,tblCounty和tblCountyAlias之间的关系是1到多。然后tblCountry和Person之间的关系是一样的。这个例子应该是相当的教科书。
我遇到的问题是,EF似乎希望我只通过主键建立关联(或者我应该将其称为实体密钥)。所以,我的问题是:
1)EF是否只希望我在实体的至少一方使用实体密钥的情况下进行关联
2)实体密钥是否与主密钥相同(即,将其从ID中删除并使国家成为实体密钥是否安全)?
3)我是否正在与EF想要工作的方式作斗争。学习WPF意味着战斗只会导致很多痛苦和失败,但我不确定这是否也适用于EF?
由于
答案 0 :(得分:0)
首先,您没有指定使用哪种类型的实体框架,但是从上下文(实体密钥)中我猜您使用的很可能是Code First类型(或者可能是模型优先)
为了使您的关联工作,这就是您的模型应该是这样的:
如您所见,它不违反使用字符串类型主键的实体框架的任何规则。 (我在Person表中包含了一个Id,因为一个人的名字可能不是唯一的)
根据我的经验,答案是:
1)当您在MSSQL中创建1到多的外键时,第一面(在本例中为tblCountry)列必须是唯一的。见create foreign key without a primary key 所以基本上它不必是主键,但使用主键要容易得多。但是这个主键可以映射到字符串属性,也可以映射到多个属性(参见复合主键)
2)是的,它是相同的,我假设Country列被映射到一个字符串属性,它可以是唯一的,因此将它用作实体密钥是完全安全的。
3)不,你不是在争吵,即使你是我认为应该总是用API来解决它的局限性和特征。
我希望这有帮助!
顺便说一下,当你在模型中创建一个新实体(右键单击你的模型并添加新选项)时,你可以选择你想要的任何实体键,如下所示: