我们正在使用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上的其他属性之一是其外键,它已被填充。
我错过了什么?我见过的每个例子都表明我所做的事情应该有效。
答案 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; }
//...
}