如何获得EF6以遵守关联/关系多重性上的唯一约束(在FK上)?

用户名

2019更新/ TLDR; 切换到Entity Framework Core(或其他任何方式)

在缺少某些“功能”的同时,EF Core除了主键外还适当地使用了替代键(又称唯一约束),因此在履行关系代数方面做得更好。YMMV否则;至少它正确支持了更多的SQL方案。

新增的支持是(非常过时的)EF Core 1.0版本..令人失望的是,原始EF从未解决过此设计(ed!)缺陷。


这可能与我的其他问题有关-似乎是:

  1. 实体框架是一个糟糕的关系代数映射器1或;

  2. (我希望如此)我总体上忽略了使用SSDL / CSDL和EDMX模型或EF映射的内容。

我有一个Schema First模型,该模式如下所示:

ExternalMaps
---
emap_id - PK

Melds
---
meld_id - PK
emap_id - >>UNIQUE INDEX<< over not-null column, FK to ExternalMaps.emap_id

为了进行验证,这些脚本如下所示,其结果ExternalMaps:1 <-> 0..1:Melds2

ALTER TABLE [dbo].[Melds] WITH CHECK ADD CONSTRAINT [FK_Melds_ExternalMaps]
FOREIGN KEY([emap_id]) REFERENCES [dbo].[ExternalMaps] ([emap_id])

CREATE UNIQUE NONCLUSTERED INDEX [IX_Melds] ON [dbo].[Melds] ([emap_id] ASC)

但是,当我使用EDMX设计器从零开始从数据库(SQL Server 2012)更新时,它错误地将关联/外键关系创建为ExternalMap:1 <-> M:Meld

当我尝试手动(通过设计器中的“ Association Set”属性)将Meld的多重性更改为1或时0..1,我得到:

运行转换:多重性在关系“ FK_Melds_ExternalMaps”中的角色“ Meld”中无效。因为从属角色属性不是关键属性,所以从属角色多重性的上限必须为*

(与我的其他问题一样,这似乎与唯一约束正确注册/认可为候选键有关。)

如何获得EF尊重1 <-> 0..1/1模型所确立多重性


1虽然我希望这不是,我想什么时候能得到EF映射到一个完全有效的RA模型没有结束悲痛的情况下:不的LINQ to SQL(L2S)存在这个问题。由于对于如此受欢迎的ORM而言,我的另一个问题没有得到解答,因此我对这种工具失去了信心。

2 FK并非是设计使然:“尽管没有可为空的外键”。-也并非是“共享的” PK,因为2009年的答案暗示此为解决方案。

我正在使用EF 6.1.1,VS 2013 Ultimate,并且不会使用任何“ OO子类型功能”-如果这会发生任何变化。


编辑感叹

多重性无效,因为从属角色属性不是关键属性?(从2011年开始)-EF的“ Microsoft认可的企业级” ORM仍然是这种情况2014年 2015年?

以这种速度,下次有人问为什么不使用EF时,除了“ LINQ to SQL可以正常工作”之外,我还有很多其他原因。

用户名

问题在于,实体框架(从EF4到EF6.1,并且知道更长的时间)不能“理解”唯一约束的概念及其所暗示的所有内容:EF映射代码优先,而不是关系代数*叹*

这个有关我的相关问题的答案提供了一个指向请求的链接,以添加缺少的功能并进行总结:

..实体框架当前仅支持基于主键的引用约束,而没有唯一约束的概念

可以将其扩展到涉及唯一约束和候选键的几乎所有领域,包括此问题中引起的多重性问题。


如果公开讨论EF的这种严重局限性并使其“广为人知”,尤其是当EF被吹捧支持Schema First和/或替换L2S时,我将感到高兴。在我看来,EF的重点是仅映射(并支持)作为一流公民的Code First。也许再过4年..

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

EF6对外键的唯一约束

来自分类Dev

我可以在EF6中使用外键来唯一约束吗?

来自分类Dev

Nhibernate唯一约束FK对象

来自分类Dev

在多个模型关联上获得唯一性

来自分类Dev

仅在子类上为列添加唯一约束

来自分类Dev

MongoDB / Mongoose Date字段上的唯一约束

来自分类Dev

Unicode字符上的SQL Server唯一约束问题

来自分类Dev

仅在子类上为列添加唯一约束

来自分类Dev

FOS用户覆盖用户存储上的唯一约束

来自分类Dev

限制域列表上的唯一约束

来自分类Dev

如何在时间戳记日期上创建唯一约束

来自分类Dev

如何在MongoDB / mongoose中交换具有唯一约束的文档上的字段?

来自分类Dev

如何使用 ruby mongoid 在字段上创建唯一约束?

来自分类Dev

Hibernate-如何捕获“完整性约束冲突:唯一约束或索引冲突”

来自分类Dev

Hibernate-如何捕获“完整性约束违规:唯一约束或索引违规”

来自分类Dev

嵌套一对多关系的唯一约束

来自分类Dev

如何将EF6关联添加到不是主键的候选键/唯一键?

来自分类Dev

EF6 PK和FK约束命名约定

来自分类Dev

为什么Postgres在空表上抛出唯一约束冲突?

来自分类Dev

插入时在空表上持续存在“唯一约束违规”

来自分类Dev

Rails Active在Postgres上使用字段值记录唯一约束

来自分类Dev

在Postgresql中,在2列上添加唯一约束,不等于特定值

来自分类Dev

在多语言站点中的Django CMSPlugin字段上定义唯一约束

来自分类Dev

尽管使用了触发器,但复合主键上的“唯一约束失败”

来自分类Dev

Django 完整性错误 - 唯一约束失败

来自分类Dev

实体框架6 SaveChanges导致唯一约束异常

来自分类Dev

违反唯一约束

来自分类Dev

放下唯一约束

来自分类Dev

如何在Rails上使用ruby为ActiveRecord关联添加唯一性

Related 相关文章

  1. 1

    EF6对外键的唯一约束

  2. 2

    我可以在EF6中使用外键来唯一约束吗?

  3. 3

    Nhibernate唯一约束FK对象

  4. 4

    在多个模型关联上获得唯一性

  5. 5

    仅在子类上为列添加唯一约束

  6. 6

    MongoDB / Mongoose Date字段上的唯一约束

  7. 7

    Unicode字符上的SQL Server唯一约束问题

  8. 8

    仅在子类上为列添加唯一约束

  9. 9

    FOS用户覆盖用户存储上的唯一约束

  10. 10

    限制域列表上的唯一约束

  11. 11

    如何在时间戳记日期上创建唯一约束

  12. 12

    如何在MongoDB / mongoose中交换具有唯一约束的文档上的字段?

  13. 13

    如何使用 ruby mongoid 在字段上创建唯一约束?

  14. 14

    Hibernate-如何捕获“完整性约束冲突:唯一约束或索引冲突”

  15. 15

    Hibernate-如何捕获“完整性约束违规:唯一约束或索引违规”

  16. 16

    嵌套一对多关系的唯一约束

  17. 17

    如何将EF6关联添加到不是主键的候选键/唯一键?

  18. 18

    EF6 PK和FK约束命名约定

  19. 19

    为什么Postgres在空表上抛出唯一约束冲突?

  20. 20

    插入时在空表上持续存在“唯一约束违规”

  21. 21

    Rails Active在Postgres上使用字段值记录唯一约束

  22. 22

    在Postgresql中,在2列上添加唯一约束,不等于特定值

  23. 23

    在多语言站点中的Django CMSPlugin字段上定义唯一约束

  24. 24

    尽管使用了触发器,但复合主键上的“唯一约束失败”

  25. 25

    Django 完整性错误 - 唯一约束失败

  26. 26

    实体框架6 SaveChanges导致唯一约束异常

  27. 27

    违反唯一约束

  28. 28

    放下唯一约束

  29. 29

    如何在Rails上使用ruby为ActiveRecord关联添加唯一性

热门标签

归档