0

我有下表,其中 StationAvailableMoves.StationID 和 StationAvailableMoves.AvailableNextStationID 都与 Station.ID 列有关系。

我正在使用它来控制从车站对象到车站对象的过程,其中车站上可以有多条路线。

在此处输入图像描述

然后,当我将这些表导入实体框架模型时,我得到以下循环引用表。

在此处输入图像描述

然后我试图在下面的 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 以防止异常它实际评估它的打击对象。

在此处输入图像描述

4

1 回答 1

0

看起来您缺少ToListStationMoves映射的调用。此外,如果您知道该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
于 2013-06-14T11:09:16.687 回答