use*_*740 15 entity-framework foreign-keys unique-key multiplicity entity-framework-6
这可能与我的另一个问题有关 - 这似乎是:
实体框架是一个可怕的关系代数映射器1或;
(我希望这样)我忽略了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
Run Code Online (Sandbox Code Playgroud)
为了验证,这些脚本如下,这应该导致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)
Run Code Online (Sandbox Code Playgroud)
但是,当我使用EDMX设计器从数据库(SQL Server 2012)更新时,它会从头开始错误地创建关联/外键关系ExternalMap:1 <-> M:Meld.
当我尝试手动更改Meld的多重性(通过设计器中的"关联集"属性)1或者0..1,或者,我得到:
运行转换:多重性在关系'FK_Melds_ExternalMaps'中的角色'Meld'中无效.由于Dependent Role属性不是关键属性,因此Dependent Role的多重性的上限必须为
*.
(与我的另一个问题一样,这似乎与Unique Constraints 没有正确注册/荣誉为候选密钥有关.)
如何1 <-> 0..1/1通过模型建立EF以获得多重性?
1虽然我希望这是不是这样的,我有没有尽头试图让EF映射到一个完全有效的RA模型时悲痛:的LINQ to SQL(L2S)并不会有这个问题.由于我的另一个问题并没有得到如此流行的ORM的轻易回答,我对这个工具失去了信心.
2按照设计,FK不是另一种方式:"虽然没有可以为空的外键." - 它也不是一个"共享"的PK,因为2009年的答案表明这是一个解决方案.
我正在使用EF 6.1.1,VS 2013 Ultimate,并且不会使用任何"OO子类型功能" - 如果这改变了什么.
编辑叹息:
多重性无效,因为从属角色属性不是关键属性?(从2011年开始) - 对于EF"微软认可的企业级"ORM来说,情况仍然如此2014 2015年?
下次当有人问为什么不使用EF时,我会有这么多的原因,除了"LINQ to SQL工作得很好"之外还有很多原因.
use*_*740 19
问题是实体框架(从EF4到EF6.1,谁知道多久)并不"理解"唯一约束的概念以及它们所暗示的一切:EF映射代码优先,而不是关系代数*叹息*
我的相关问题的答案提供了添加缺失功能的请求的链接并总结了它:
..实体框架目前仅支持基于主键的引用约束,并且没有唯一约束的概念.
这可以扩展到几乎涉及唯一约束和候选键的所有领域,包括在这个问题中提出的多重性问题.
如果公开讨论EF的严重限制并使其"众所周知",我会很高兴,特别是当EF被吹捧为支持Schema First和/或取代L2S时.从我的观点来看,EF主要围绕映射(和支持)Code First作为一等公民.也许在另外4年..
| 归档时间: |
|
| 查看次数: |
4386 次 |
| 最近记录: |