实体框架到同一个表的多个外键

GBreen12

我有两个实体DataTag和CalcDataTag:

public class CalcDataTag : BaseModel
{
    [Column("CalcDataTagId")]
    public override Guid ID { get; set; }

    public Guid DataTagId { get; set; }
    public DataTag DataTag { get; set; }

    public Guid ChildDataTagId { get; set; }
    public DataTag ChildDataTag { get; set; }
}

public class DataTag : BaseModel
{
    [Column("DataTagId")]
    public override Guid ID { get; set; }

    public ICollection<CalcDataTag> CalcDataTags { get; set; }
}

我这样设置上下文:

modelBuilder.Entity<DataTag>()
            .HasMany<CalcDataTag>(x => x.CalcDataTags)
            .WithRequired(x => x.ChildDataTag)
            .HasForeignKey(x => x.ChildDataTagId);

        modelBuilder.Entity<DataTag>()
            .HasMany<CalcDataTag>(x => x.CalcDataTags)
            .WithRequired(x => x.DataTag)
            .HasForeignKey(x => x.DataTagId);

CalcDataTags列表应该是CalcDataTags的列表,其中DataTagId或ChildDataTagId等于DataTag的ID,但设置上下文的方式,底部设置覆盖顶部设置,而我仅获得CalcDataTags列表,其中DataTagId为等于DataTag的ID。如果我切换设置,那么我只会得到CalcDataTag的列表,其中ChildCalcDataTagId等于DataTag的ID。基本上,我想要得到的是两个列表的并集。每个实体只有一个PrimaryKey,没有复合键。

科里·阿德勒(Corey Adler)

您需要在DataTag桌上摆放第二个收藏夹。别无选择。实体框架正变得困惑,因为它只能将一个一对多关系映射到一个特定的属性,而不是两个。您需要执行以下操作:

DataTag

public ICollection<CalcDataTag> CalcDataTags { get; set; }
public ICollection<CalcDataTag> ChildCalcDataTags { get; set; }

在您的modelBuilder

modelBuilder.Entity<DataTag>()
            .HasMany<CalcDataTag>(x => x.ChildCalcDataTags)
            .WithRequired(x => x.ChildDataTag)
            .HasForeignKey(x => x.ChildDataTagId);

modelBuilder.Entity<DataTag>()
            .HasMany<CalcDataTag>(x => x.CalcDataTags)
            .WithRequired(x => x.DataTag)
            .HasForeignKey(x => x.DataTagId);

如果您希望能够同时抓取所有这些对象(看起来确实如此),则可能需要考虑添加一个[NotMapped]属性,属性将抓取两个集合的并集,如下所示:

[NotMapped]
public ICollection<CalcDataTag> AllCalcDataTags
{
  return CalcDataTags.Union(ChildCalcDataTags);
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在实体框架中,如何处理同一个类的多个外键

来自分类Dev

实体框架多个外键指向同一个表

来自分类Dev

使用实体框架代码优先从同一个父表中获得两个外键,而无需在父实体上指定集合

来自分类Dev

实体框架 - 无法创建多个引用同一个表的 DbContext。- 解决方法

来自分类Dev

Django多个外键到同一个表

来自分类Dev

SQL 引用同一个表的多个外键

来自分类Dev

实体框架一个外键映射到多个表

来自分类Dev

加入同一个表中的两个外键引用同一个主键

来自分类Dev

MVC 4实体框架同一表的两个外键导致循环或多个级联路径

来自分类Dev

MySQL的:使用两个外键到同一个表

来自分类Dev

JPA休眠两个指向同一个表的外键

来自分类Dev

mysql 查询引用同一个表的两个外键

来自分类Dev

首先在实体框架代码中为同一表定义多个外键

来自分类Dev

代码优先实体框架-同一表有多个外键

来自分类Dev

django多个同一个父类的外键

来自分类Dev

SQL JOIN 并需要一个视图:2 个外键引用同一个表

来自分类Dev

多个外键指向同一个父表

来自分类Dev

多个外键指向同一个父表

来自分类Dev

Rails-多个外键指向同一个表

来自分类Dev

如何使用具有多个 dbcontexts 的实体框架迁移将不同的域类映射到同一个表

来自分类Dev

实体框架核心-代码优先-两个外键-一个表

来自分类Dev

多个对象监听同一个键

来自分类Dev

如何在实体框架中拥有一个只有外键的表

来自分类Dev

实体框架两次插入同一个实体

来自分类Dev

同一个表的多个列上的 SQL 联接

来自分类Dev

来自同一个表的多个内部联接

来自分类Dev

Oracle 到多个同一个表

来自分类Dev

JOIN 与右侧同一个表的多个引用

来自分类Dev

合并多个查询 - 同一个表

Related 相关文章

  1. 1

    在实体框架中,如何处理同一个类的多个外键

  2. 2

    实体框架多个外键指向同一个表

  3. 3

    使用实体框架代码优先从同一个父表中获得两个外键,而无需在父实体上指定集合

  4. 4

    实体框架 - 无法创建多个引用同一个表的 DbContext。- 解决方法

  5. 5

    Django多个外键到同一个表

  6. 6

    SQL 引用同一个表的多个外键

  7. 7

    实体框架一个外键映射到多个表

  8. 8

    加入同一个表中的两个外键引用同一个主键

  9. 9

    MVC 4实体框架同一表的两个外键导致循环或多个级联路径

  10. 10

    MySQL的:使用两个外键到同一个表

  11. 11

    JPA休眠两个指向同一个表的外键

  12. 12

    mysql 查询引用同一个表的两个外键

  13. 13

    首先在实体框架代码中为同一表定义多个外键

  14. 14

    代码优先实体框架-同一表有多个外键

  15. 15

    django多个同一个父类的外键

  16. 16

    SQL JOIN 并需要一个视图:2 个外键引用同一个表

  17. 17

    多个外键指向同一个父表

  18. 18

    多个外键指向同一个父表

  19. 19

    Rails-多个外键指向同一个表

  20. 20

    如何使用具有多个 dbcontexts 的实体框架迁移将不同的域类映射到同一个表

  21. 21

    实体框架核心-代码优先-两个外键-一个表

  22. 22

    多个对象监听同一个键

  23. 23

    如何在实体框架中拥有一个只有外键的表

  24. 24

    实体框架两次插入同一个实体

  25. 25

    同一个表的多个列上的 SQL 联接

  26. 26

    来自同一个表的多个内部联接

  27. 27

    Oracle 到多个同一个表

  28. 28

    JOIN 与右侧同一个表的多个引用

  29. 29

    合并多个查询 - 同一个表

热门标签

归档