我有下表,其中StationAvailableMoves.StationID和StationAvailableMoves.AvailableNextStationID在Station.ID列上都有关系。
我用这个来控制从站对象到站对象的进程,其中站可以有多条路径。
当我将这些表导入Entity Framework模型时,我得到以下循环参考表。
然后我尝试在下面的DTO中加载数据
Imports System.Runtime.Serialization
Namespace Models
<DataContract()>
Public Class Stations
<DataMember()>
Public Property ID As Int32
<DataMember()>
Public Property Name As String
<DataMember()>
Public Property BullName As String
<DataMember()>
Public Property StationMoves As IList(Of Stations)
End Class
End Namespace
虽然我可以使用下面的LINQ查询将数据加载到基元类型中,但我不确定如何加载调用中遇到的子对象。
Using db As New StockTrackingEntities
Dim var = (From s In db.Stations.Where(Function(w) w.BUID.Equals(buID))
Select New Stations With {.ID = s.ID,
.Name = s.Name,
.BullName = s.BullName}).ToList
End Using
我可以在单个LINQ语句中执行此操作,还是需要在集合中使用For Each并手动加载它?
修改
我已经尝试过以下语句(可能是垃圾)并且在编译时会生成运行时异常
Dim var = (From s In db.Stations.Where(Function(w) w.BUID.Equals(buID))
Select New Stations With {.ID = s.ID,
.Name = s.Name,
.BullName = s.BullName,
.StationMoves = From m In s.Station1
Select New Stations With {.ID = m.ID,
.Name = m.Name,
.BullName = m.BullName}}).ToList
异常
从上面的查询中删除ToList以防止它实际评估它的例外情况。
答案 0 :(得分:0)
您的ToList
映射上似乎缺少对StationMoves
的调用。此外,如果您知道将要访问StationMoves
属性,您可以急于加载它,例如
(From s In db.Stations.Include("StationMoves").Where(Function(w) w.BUID.Equals(buID))
Select New Stations With {.ID = s.ID,
.Name = s.Name,
.BullName = s.BullName,
.StationMoves = s.StationMoves.ToList }).ToList