首页 > 解决方案 > EF Core 为多对多返回 null

问题描述

所以我的用例非常简单,我有车辆和车辆配件。现在我创建了 3 个表,一个用于车辆,一个用于附件和一个多对多表,如下所示:公共类车辆

车辆表

{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string RegistrationNumber { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }
    public int Kilometers { get; set; }
    public string VehicleIdentificationNumber { get; set; }
    public decimal RetailPrice { get; set; }
    public decimal CostPrice { get; set; }
    public ICollection<VehicleAccessory> VehicleAccessories { get; set; }
    public ICollection<VehicleImage> VehicleImages { get; set; }
    public DateTime DTCreated { get; set; }
    public DateTime DTUpdated { get; set; }
}

附件桌

public class Accessory
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public string Description { get; set; }
    public ICollection<VehicleAccessory> VehicleAccessories { get; set; }
}

链接表

public class VehicleAccessory
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }
    public long VehicleId { get; set; }
    public Vehicle Vehicle { get; set; }
    public long AccessoryId { get; set; }
    public Accessory Accessory { get; set; }
}

现在我手动向数据库添加了一个条目以链接附件和车辆表,但如果我查询车辆表以获取 VehicleAccessories 属性,它不会被识别,它只返回 null。我尝试在属性上使用 include,但它给了我一个循环引用错误。附带说明一下,我不知道如何使用 EF 添加到多对多表中。

尝试获取我正在使用的记录: _context.Vehicles.ToList();

有人可以解释为什么这不起作用。

标签: c#entity-framework-core

解决方案


1)您是否在 SQL Server 中创建了这些表之间的关系?

2)你在nuget包控制台中使用了scaffold-dbcontext命令吗?您的 VehicleAccessory 表看起来像您没有使用 scaffold-dbcontext 命令。

3)使用下面的代码

_context.Vehicles.Include(x => x.VehicleAccessories).Include("VehicleAccessories.Accessory").ToList();

推荐阅读