繁体   English   中英

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

[英]Association entity is valid in LINQPad but null at runtime

假设我有一些与汽车相关的实体。 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根据其VehicleType获取给定VehiclePrice ...

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

现在,当使用LINQPad时,当我将数据库用作源时,此查询效果很好。 我得到了预期的价格。 但是,在Visual Studio中使用此方法时,将引发异常。

var myVehiclePrice = myVehicle.VehicleType.Prices.Select(p => p.Price);

唯一的例外是VehicleType为null。 我知道那里有数据,我只是不确定为什么VehicleType显示为null

是的,我在web.config和LINQPad中使用了相同的连接字符串。

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

解决方案 :我能够使其正常运行。 最后,为了获得价格,我必须在Include语句中同时包含VehicleTypePrice实体。

var myVehcilePrice = myVehicle.Include("VehicleType.Prices").Single(v => v.Id == 1234).VehicleType.Prices

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM