实体框架是否可以在主键和外键之间添加关联

时间:2010-09-15 02:47:39

标签: entity-framework foreign-keys entity-framework-4 associations

我的EDMX上有以下实体: - alt text

这两个实体是由从数据库更新模型生成的。

现在,请注意我的国家/地区如何拥有以下主键: -

名称&的 IsoCode

这是因为Name和IsoCode在系统中每个国家都是独一无二的。

现在,与我的国家......它是相似的。主键是: -

名称&的 CountryId

每个州的名称和国家/地区都是唯一的。

现在,国家的外键是CountryId。这是sql: -

ALTER TABLE [dbo].[States]  WITH CHECK ADD 
        CONSTRAINT [FK_States_Countries] FOREIGN KEY([CountryId])
REFERENCES [dbo].[Countries] ([CountryId])
ON UPDATE CASCADE
GO

ALTER TABLE [dbo].[States] CHECK CONSTRAINT [FK_States_Countries]
GO

非常简单的东西。

但是EntityFramework不喜欢它:(假设我需要将State实体中的一些属性连接到Country实体中的两个主键属性。

是否可以在Country.CountryId< - >上添加Country和State之间的ASSOCIATION State.CountryId ...就像我在我的数据库中映射一样?

干杯;)

2 个答案:

答案 0 :(得分:10)

在EF(3.5和4.0)中,FK必须指向主键。

但您似乎试图指向候选键(即[国家]。[CountryId]

我知道这是EF团队正在为下一个版本考虑的事情:)

希望这有帮助

亚历

答案 1 :(得分:0)

为了正确的数据库规范化,首先必须是主键必须只有 CountryId StateId 字段 - 每个表的主要Id字段。

我从描述中看到了名称& IsoCode 名称& CountryId 实际上应该是唯一键,而不是主键。

然后模型类 State 应该有一个字段:

public Country Country { get; set; }

现在EF有很好的例子,自4.3.1 +以来它完全支持Code first / DB第一个模型,我认为这样可以轻松解决这个问题。 EF 5具有更多兼容性更新,因此我认为它不会成为传统数据库引擎的问题。