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

用户名

使用Schema First,我具有数据库结构,因此

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

并且在生成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>

这会在<ReferentialConstraint>元素上产生错误

运行转换:主体角色ExternalDataItems引用的属性必须与关系FK_ExtMaps_ExtDataItems的关系约束中主体角色引用的EntityType ExternalDataItem的键完全相同。确保在“主要角色”中指定了所有关键属性。

对于PK,ExternalDataItems SSDL的“主要角色”(?)如下所示,并且UX似乎不存在2,只是作为简单的标量属性:

  <EntityType Name="ExternalDataItems">
      <Key>
        <PropertyRef Name="edataitem_id" />
      </Key>
      ..
      <Property Name="datahash" Type="binary" MaxLength="20" Nullable="false" />
  </EntityType>

如何添加此关系-在非PK候选密钥上使用FK?(在“工作”之后,我还希望对CSDL也具有一个Navigation属性。)

此外,关联线没有出现在设计图面上-我怀疑这只是此错误的结果。我正在使用Entity Framework版本6.1.1(最新发布在nuget上)和Visual Studio 2013 Ultimate Update 4。


1标准EDMX“从数据库更新”似乎没有解决这些FK关系(可能与此bug有关),并且上面的结果是在使用Huagati DBML / EDMX工具之后。如果我之前尝试“添加关联”,则设计人员将错误地尝试使用主键(FK关系不支持该主键),并且不提供选择替代属性的选项。


2<UniqueConstraint>“实体框架中的唯一约束”所述,尝试添加元素会导致友好的XML验证错误:

元素'ElementType'..具有无效的子元素'UniqueConstraint'。

马克·舍甫琴科

看起来像“缺少重要特征”

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

您可以在数据库方案中删除外键并使用LINQ联接表:

from item in ExternalDataItems
join map in ExternalMaps on item.datahash = map.ext_datahash
select new { item.edataitem_id, map.emap_id };

您也可以使用这些联接表创建VIEW并使用其中一个。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将多个值添加到同一键

来自分类Dev

CodeIgniter DB Forge将引擎和唯一键添加到表

来自分类Dev

CodeIgniter DB Forge将引擎和唯一键添加到表中

来自分类Dev

如何使用EF 6 Fluent Api添加复合唯一键?

来自分类Dev

如何将关联值添加到已具有键的地图?

来自分类Dev

MariaDB主键与唯一键

来自分类Dev

唯一键(不是主键)可以是其他表的外键吗?

来自分类Dev

如何将索引添加到数组而不是让键从零开始?

来自分类Dev

如何在现有键处将唯一值添加到哈希图

来自分类Dev

EF6对外键的唯一约束

来自分类Dev

如何将键/值对添加到哈希的开头?

来自分类Dev

如何将多个值添加到字典键

来自分类Dev

如何将多个值添加到单个键

来自分类Dev

如何将一个表的主(代理)键添加到另一表的外键中?

来自分类Dev

如何将多个外键添加到表的一列中?

来自分类Dev

如何将许多值添加到javascript对象中的一个键

来自分类Dev

jOOQ-基于唯一键(不是主键)更新记录

来自分类Dev

SQL:将主键添加到非唯一索引

来自分类Dev

如何将多个逗号分隔的值附加到同一键

来自分类Dev

如何将重复键的值添加到键中:[值数组] 在 Perl 中

来自分类Dev

如何检查唯一键约束

来自分类Dev

如何避免没有主键和唯一键的重复条目?

来自分类Dev

如何为sqlplus中的此列列表错误修复不匹配的唯一键或主键?

来自分类Dev

mysql如何使用两个字段作为主键和唯一键

来自分类Dev

如何在Sqlite for Android Studio中为用户ID实现主键或唯一键

来自分类Dev

反应唯一键-索引和ID不是唯一键

来自分类Dev

如何确保关联列表在Emacs中维护唯一键

来自分类Dev

如何将ID添加到Postgresql中的主键?

来自分类Dev

如何将pandas DataFrame压缩成具有唯一键和列出值的字典?

Related 相关文章

  1. 1

    如何将多个值添加到同一键

  2. 2

    CodeIgniter DB Forge将引擎和唯一键添加到表

  3. 3

    CodeIgniter DB Forge将引擎和唯一键添加到表中

  4. 4

    如何使用EF 6 Fluent Api添加复合唯一键?

  5. 5

    如何将关联值添加到已具有键的地图?

  6. 6

    MariaDB主键与唯一键

  7. 7

    唯一键(不是主键)可以是其他表的外键吗?

  8. 8

    如何将索引添加到数组而不是让键从零开始?

  9. 9

    如何在现有键处将唯一值添加到哈希图

  10. 10

    EF6对外键的唯一约束

  11. 11

    如何将键/值对添加到哈希的开头?

  12. 12

    如何将多个值添加到字典键

  13. 13

    如何将多个值添加到单个键

  14. 14

    如何将一个表的主(代理)键添加到另一表的外键中?

  15. 15

    如何将多个外键添加到表的一列中?

  16. 16

    如何将许多值添加到javascript对象中的一个键

  17. 17

    jOOQ-基于唯一键(不是主键)更新记录

  18. 18

    SQL:将主键添加到非唯一索引

  19. 19

    如何将多个逗号分隔的值附加到同一键

  20. 20

    如何将重复键的值添加到键中:[值数组] 在 Perl 中

  21. 21

    如何检查唯一键约束

  22. 22

    如何避免没有主键和唯一键的重复条目?

  23. 23

    如何为sqlplus中的此列列表错误修复不匹配的唯一键或主键?

  24. 24

    mysql如何使用两个字段作为主键和唯一键

  25. 25

    如何在Sqlite for Android Studio中为用户ID实现主键或唯一键

  26. 26

    反应唯一键-索引和ID不是唯一键

  27. 27

    如何确保关联列表在Emacs中维护唯一键

  28. 28

    如何将ID添加到Postgresql中的主键?

  29. 29

    如何将pandas DataFrame压缩成具有唯一键和列出值的字典?

热门标签

归档