关联实体在LINQPad中有效,但在运行时

时间:2016-02-10 20:34:24

标签: c# entity-framework associations linqpad

我们假设我有一些与汽车相关的实体。 Vehicle班级和VehicleType班级。

public class Vehicle
{
    public int Id {get; set;}
    public string Name {get; set}
    public int VehicleTypeId {get; set;}
    public virtual VehicleType VehicleType {get; set;}
}

public class VehicleType
{
    public int Id {get; set;}
    public string VehicleTypeName {get; set}
    public ICollection<Vehicle> Vehicles {get; set;}
    public ICollection<Price> Prices {get; set;}
}

public class Price
{
    public int Id {get; set;}
    public int Price {get; set;}
    public int VehicleTypeId {get; set;}
    public virtual VehicleType VehicleType {get; set;}
}

VehicleType表用作Vehicle表和Price表的关系表。我正在尝试使用LINQ来获取给定Price的{​​{1}},基于Vehicle ...

VehicleType

现在使用LINQPad时,当我使用数据库作为源时,此查询效果很好。我按预期收回价格。但是,在Visual Studio中使用它时会抛出异常..

var myVehicle = dbContext.Vehicles.FirstOrDefault(v => v.Id == 1234);
var myVehiclePrice = myVehicle.VehicleType.Prices.Select(p => p.Price);

例外是var myVehiclePrice = myVehicle.VehicleType.Prices.Select(p => p.Price); 为空。我知道那里有数据,我只是不确定为什么VehicleType显示为VehicleType

是的,我在null和LINQPad中使用相同的连接字符串。

编辑:我应该注意,在使用LINQPad时,我使用的是C#表达式而不是C#语句。

解决方案:我能够让它运转起来。最后,为了获得价格,我必须在Include语句中同时包含web.configVehicleType个实体。

Price

请注意,您希望在Include语句中包含关联名称。感谢TheGeekYouNeed对Include的帮助。

1 个答案:

答案 0 :(得分:1)

var myVehicle = dbContext.Vehicles.Where(v => v.Id == 1234).Include("VehicleType").FirstOrDefault();