0

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

在此处输入图像描述

tblCounty 和 tblCountyAlias 之间的关系是一对多,使用两者中的 [Country] 列作为相关列。然后 tblCountry 和 Person 之间的关系是相同的。这个例子应该是相当教科书的。

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

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

2)实体键是否与主键相同(即,将其从 ID 中删除并将 Country 设为实体键是否安全)?

3)我是否在与 EF 想要的工作方式作斗争。学习 WPF 意味着战斗只会导致很多痛苦和失败,但我不确定这是否也适用于 EF?

谢谢

4

1 回答 1

0

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

为了使您的关联有效,您的模型应如下所示: 在此处输入图像描述

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

根据我的经验,答案是:

1)当您在 MSSQL 中创建具有 1 到多的外键时,第一侧(在这种情况下为 tblCountry)列必须是唯一的。请参阅创建没有主键的外键 所以基本上它不必是主键,但使用主键要容易得多。但是这个主键可以映射到一个字符串属性,或者也可以映射到多个属性(参见复合主键)

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

3) 不,你不是在为方式而战,即使你是,我认为人们应该总是与 API 斗争一下,以了解它的限制和特性。

我希望这有帮助!

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

在此处输入图像描述

于 2013-02-20T13:21:16.347 回答