我的数据库中有两个表,它们以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.
答案 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#