Entity Framework 核心未加载 1 到 0 外键实体

Entity Framework Core not loading 1 to 0 foreign key entity

我有三个简单的实体 - 购物篮产品购物篮商品。 因此,通过 BasketItem 将 Product 添加到 Basket。每个 BasketItem 必须 连接到一个产品和一个购物篮,但是一个产品 不必 连接到一个 BasketItem(即还没有添加到任何篮子)。

Basket 和 BasketItem 具有 1-many 关系,而 BasketItem 和 Product 具有 1-0 关系,这意味着 Product 可以在 Basket 中(通过 BasketItem),但不一定是。

我已经以常规方式设置了一个 DbContext,一切正常,除了当通过 BasketItem 访问时产品实体为空,即 entity framework 根本不加载它。例如

basket.BasketItems.FirstOrDefault().Product 给出空值。

我已经谷歌搜索了几个小时,但找不到解决方案。我还尝试了以下几种变体:

builder.Entity<BasketItem>().HasOne(p => p.Product);

但 none 有效。 代码如下:

public class Basket
{
    [Key]
    public int ID { get; set; }

    public ICollection<BasketItem> BasketItems { get; set; } = new List<BasketItem>();
}

}

public class BasketItem
{
    public int ID { get; set; }

    public int ProductID { get; set; }

    [ForeignKey("ProductID")]
    public virtual Product Product { get; set; }

    public int BasketID { get; set; }

    [ForeignKey("BasketID")]
    public virtual Basket Basket { get; set; }

    public int ProductQuantity { get; set; }

}

public class Product
{
    public int ID { get; set; }

    [Required]
    public string ProductName { get; set; }

    public string Description { get; set; }

    public double Price { get; set; }
}

在我的上下文中设置:

     builder.Entity<Product>().HasData(new Product() { ID = 1, ProductName = "Harry Potter hardback collection", Description = "All 7 Harry Potter books in hardback.", Price = 150.00 });

...

builder.Entity<Basket>().HasData(new Basket() { ID = 1, BasketTotalPrice = 750 });

builder.Entity<BasketItem>().HasOne(p => p.Product);

builder.Entity<BasketItem>().HasData(new BasketItem() { ID = 1, BasketID = 1, ProductID = 1, ProductQuantity = 2 });

Loading Related Data 文档部分。

您将不得不使用 Include() 方法

如评论中所述,您必须先 Include() BasketItmens。 ThenInclude() 产品。

所以在你的情况下,解决方案是

context.Basket.Include(b => b.BasketItems).ThenInclude(bi => bi.Product).FirstOrDefault().Product