这可能与我的另一个问题有关 - 这似乎是:
实体框架是一个可怕的关系代数映射器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 …
entity-framework foreign-keys unique-key multiplicity entity-framework-6
使用Schema首先,我有一个数据库结构,如此
ExternalDataItems
---
edataitem_id PK -- surrogate auto-increment - NOT for FK relation here
datahash UX -- Candidate Key / Unique Index (binary(20))
ExternalMaps
---
emap_id PK
ext_datahash FK on ExternalDataItems.datahash - NOT referencing the surrogate PK
Run Code Online (Sandbox Code Playgroud)
并且在生成SSDL/CSDL之后1有这个
<Association Name="FK_ExtMaps_ExtDataItems">
<End Multiplicity="1" Role="ExternalDataItems" Type="Store.ExternalDataItems" />
<End Multiplicity="*" Role="ExternalMaps" Type="Store.ExternalMaps" />
<ReferentialConstraint> <!-- error on this element -->
<Principal Role="ExternalDataItems">
<PropertyRef Name="datahash" />
</Principal>
<Dependent Role="ExternalMaps">
<PropertyRef Name="ext_datahash" />
</Dependent>
</ReferentialConstraint>
</Association>
Run Code Online (Sandbox Code Playgroud)
这会在<ReferentialConstraint>元素上生成错误
运行转换:主体角色ExternalDataItems引用的属性必须与关系FK_ExtMaps_ExtDataItems的关系约束中的主体角色引用的EntityType ExternalDataItem的键完全相同.确保在主体角色中指定了所有关键属性. …
entity-framework foreign-key-relationship unique-key edmx entity-framework-6