实体框架核心未加载相关数据

时间:2017-05-15 21:01:10

标签: .net entity-framework core

我们正在使用ASP.NET Core和EF Core开发新的应用程序。我们在最新的稳定版本(v1.1.2)上发布。我们无法通过导航属性加载相关数据。

我知道EF Core不支持延迟加载,但我所看到的主题上的每个帖子都表明我们应该能够使用.Include()显式加载相关数据。但是,这对我们不起作用,当我们在代码中加载它们时,相关实体总是为空。

我们有两个实体 - ' Exchange'和'贸易'。 '交易'有一个外键来交易'并包含名为Request的虚拟交易和另一个名为Offer的虚拟交易,因此: -

[Table("Exchange")]
public partial class Exchange : BaseEntity
{

    public string Pending { get; set; }

    [Display(Name = "Exchange Date"), DataType(DataType.Date)]
    public DateTime DateOfExchange { get; set; }
    public decimal EstimatedHours { get; set; }
    public decimal ActualHours { get; set; }
    public string Description { get; set; }
    public string FollowUp { get; set; }
    public string Status { get; set; }
    [ForeignKey("User")]
    [Required]
    public int Broker_Fk { get; set; }
    public virtual User Broker { get; set; }
    public int Request_Fk { get; set; }
    public virtual Trade Request { get; set; }
    public int Offer_Fk { get; set; }
    public virtual Trade Offer { get; set; }

我有一个View模型,可以实例化一个' Exchange'我知道有一个相关的请求': -

  _vm.Exchanges = _context.Exchange.Include(i => i.Request).Where(t => t.Request.User_Fk == user.Id || t.Offer.User_Fk == user.Id).ToList();

这会返回一个Exchange,我将传递给View并在View Model中呈现: -

@foreach (var item in Model.Exchanges)
{
    <span>@item.Request.Name</span>   <br /> 
}

问题是@ item.Request为null,即使我在加载Exchange时已明确包含它。我知道确实存在一个相关的实体,因为Exchange上的其他属性之一是其外键,它已被填充。

我错过了什么?我见过的每个例子都表明我所做的事情应该有效。

1 个答案:

答案 0 :(得分:0)

您的模型属性搞砸了:

[Table("Exchange")]
public partial class Exchange : BaseEntity
{

    //...

    [ForeignKey("Broker")]
    [Required]
    public int Broker_Fk { get; set; }
    public virtual User Broker { get; set; }

    [ForeignKey("Request")]
    public int Request_Fk { get; set; }
    public virtual Trade Request { get; set; }

    //...
}