到同一对象的多个关系。清单为空

时间:2019-05-10 07:20:37

标签: c# entity-framework

我的数据库中有两个表,它们以2x 1链接到同一对象的许多关系。

自从我们将第二个DBLot2添加到数据库以来,DBLot中的列表不再充满对象。

我们在这里做错了什么吗?

    public class DBNesting
    {
         [Key]
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public long DBNestingID { get; set; }

         public DBLot DBLot { get; set; }

         [ForeignKey("DBLot")]
         public long DBLotID { get; set; }

         public DBLot DBLot2 { get; set; }

         [ForeignKey("DBLot2")]
         public long? DBLot2ID { get; set; }
    }

    public class DBLot
    {
         [Key]
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public long DBLotID { get; set; }

         public List<DBNesting> Nestingen { get; set; }
    }


    This is how we get the objects:

    DatabaseContext dc = new DatabaseContext();
    dc.DBNesting
    .include("DBLot")
    .include("DBLot2")
    .where(...)
    .ToList();

    However the other side is not working:
    dc.DBLot
    .include("Nestingen")
    .where(...)
    .ToList()

    I would expect that all the DBNesting where we used a DBLot in property 
    DBLot ore DBLot2 shoud be in Nestingen. But the collections are empty.

1 个答案:

答案 0 :(得分:0)

 dc.DBLot
    .include("Nestingen")
    .where(...)
    .ToList()

仅在直接对象上不将DBLot包括在Nestingen中。

因此它将有DBLot和一个Nestingen列表,但是该列表中没有每个Nestingen的DBLot。

因此,基本上,您应该能够看到...您在这里具有递归,对象引用了引用自身的对象。

dc.DBLot.include("Nestingen")
        .include("Nestingen.DBLot")
        .include("Nestingen.DBLot2")
        .where(...)
        .ToList()

可能会起作用,现在只能再次使层次更深,但是如果您需要的话,那就太棒了。

您可以启用延迟加载...但不建议使用“责任”

ef 6的include效率不是很高。还有一个扩展名,允许您使用键入的版本,因此include(x => x.Nestingen),只需删除字符串名称即可。

是具有嵌套对象关系的目标。就像是 Tree data structure in C#