[英]List contains one object why?
我有一个问题,其中包含list属性的对象包含1项,它不应该(它应该为空)。
Station类包含边列表(List Edges)。 Edge类有一个EndStation,它是Station类型。
问题是,在从GetEdgesByStartStation()返回IQueryable后,每个Edge上的EndStation包含一个边缘列表(List Edges),它不是空的(应该如此)。 列表中的项目是它自己的Station(edge.EndStation)。 我试图在下面的代码中用注释来说明它
public IQueryable<Edge> GetEdgesByStartStation(Station station)
{
var edges = db.Edges.Where(x => x.StartStationId.Equals(station.ID));
foreach (var edge in edges)
{
edge.EndStation = db.Stations.FirstOrDefault(x => x.ID.Equals(edge.EndStationId));
//Here the edge.EndStation.Edges would contain 1 item, edge.EndStation
//eg. edge.EndStation = "Miami", edge.EndStation.Edges = { "Miami" }
}
return edges;
}
我想要这个代码做的是获得传递给方法的Station的所有边缘。 对于每条边,将EndStation连接到空的边列表。
车站类:
public partial class Station
{
public Station()
{
this.Reservations = new List<Reservation>();
this.StationMaintenances = new List<StationMaintenance>();
}
[DataMember]
//[JsonConverter(typeof(Int32))]
public int ID { get; set; }
[DataMember]
//[JsonConverter(typeof(Int32))]
public int TypeId { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public decimal StationLat { get; set; }
[DataMember]
public decimal StationLong { get; set; }
[DataMember]
public bool IsOperational { get; set; }
[DataMember]
public bool IsActive { get; set; }
[DataMember]
public DateTime CreatedDate { get; set; }
[DataMember]
public virtual BatteryStorage BatteryStorages { get; set; }
[DataMember]
public virtual List<Reservation> Reservations { get; set; }
[DataMember]
public virtual List<StationMaintenance> StationMaintenances { get; set; }
[DataMember]
public virtual List<Edge> Edges { get; set; }
[DataMember]
public virtual StationType StationType { get; set; }
}
边缘类:
public partial class Edge
{
[DataMember]
public int ID { get; set; }
[DataMember]
public int StartStationId { get; set; }
[DataMember]
public int EndStationId { get; set; }
[DataMember]
public virtual Station EndStation { get; set; }
[DataMember]
public decimal Distance { get; set; }
[DataMember]
public decimal Time { get; set; }
[DataMember]
public bool IsActive { get; set; }
}
怎么会这样?
这就是所谓的relationship fixup
。
Station EndStation
和List<Edge> Edges
位于相同关系的两侧。
当从Db( edge.EndStation = ...
行)实现对象时,EF会发现对面是你在内存中已经存在的“边缘” - 所以它会进行修正并将其填入,无论你是喜不喜欢。
您应该在这里查看这个答案以获取一些细节LazyLoadingEnabled设置似乎在EF 5中不起作用
正如@Slauma提到的那样,我认为没有一种方法可以禁用它 - 我猜这两种方法都是合乎逻辑的(如果不需要额外的Db加载)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.