【问题标题】:Entity Framework Is it possible to add an ASSOCIATION between Primary Keys and a Foreign Key实体框架是否可以在主键和外键之间添加关联
【发布时间】:2018-08-02 18:06:42
【问题描述】:

我的 EDMX 上有以下实体:-

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

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

名称 & IsoCode

这是因为每个国家在系统中的名称和 IsoCode 都是唯一的。

现在,在我的州……情况相似。主键是:-

姓名 & CountryId

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

现在,States 的外键是 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 State.CountryId 上添加国家和州之间的关联...就像我在我的数据库中映射的那样?

干杯 ;)

【问题讨论】:

  • @Alex James :你在帮忙吗,好心的先生?
  • 是的……请看下面的答案!

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


【解决方案1】:

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

但您似乎试图指向候选键(即 [Countries].[CountryId]

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

希望对你有帮助

亚历克斯

【讨论】:

  • 感谢 Alex 回答我的问题。我真诚地感谢它:) 看起来我会回去使身份成为 PK 并添加独特的约束。 Doh :) 总是比当前的 EF 版本领先一步... :) 再次感谢伙伴 - 真的很喜欢你的帮助 :) 继续努力!
  • 我查看了 CTP5 更改文档,但没有看到与此相关的任何内容。是否仍在考虑此功能,或正在开发中,或者......?这是映射遗留数据库的真正绊脚石。
【解决方案2】:

对于正确的数据库规范化,第一件事是主键只能是 CountryIdStateId 字段 - 每个表的主要 Id 字段。

我从描述中看到 Name & IsoCodeName & CountryId 的 ss 实际上应该是唯一键,而不是主键。

那么模型类State应该有一个字段:

public Country Country { get; set; }

现在 EF 有非常好的示例,并且从 4.3.1 + 开始,它完全支持 Code first / DB first 模型,我认为这将有助于解决这个问题。 EF 5 有更多的兼容性更新,所以我认为它不会成为遗留数据库引擎的问题。

【讨论】:

  • 除非我以某种方式误解了您的答案 - 这完全是问题的重点。 “是否可以在 Country.CountryId State.CountryId 上添加国家和州之间的关联”是问题 - 如“我可以在主键以外的其他东西上添加关联(在这种情况下为候选键) "
猜你喜欢
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多