首页 > 解决方案 > EF Core 3 - 一对多关系未填充

问题描述

我有 2 个模型 - 用户和订单。一个用户有很多订单,一个订单有一个用户。

public class User
{
    [Key]
    public int Id { get; set; }

    ...

    public List<Order> Orders { get; set; } = new List<Order>();
}
public class Order
{
    [Key]
    public int Id { get; set; }

    public int UserId { get; set; }
    public User User { get; set; }

    ...
}

我的数据库提供商是 MySQL,所以我使用的是 Pomelo.EntityFrameworkCore.MySql。

问题是 Orders 属性始终为空(或在没有属性初始化程序的情况下为 null)。我尝试过使用 ForeignKey 和 InversionProperty,但它没有帮助。

任何帮助表示赞赏。

标签: c#asp.net-coreentity-framework-core

解决方案


为了填充 Order.User 和 User.Orders,您需要调用 .Include()。例如:

this.databaseContext.Orders.Include(order => order.User).Where(...);
this.databaseContext.Users.Include(user => user.Orders).Where(...);

资料来源:https ://docs.microsoft.com/en-us/ef/core/querying/related-data

编辑:看到问题下的评论,我认为您在设置两个类之间的关系时遇到问题。在您的上下文中,您应该设置关系。这是一个例子:

protected override void OnModelCreating(ModelBuilder modelBuilder) {
    modelBuilder.Entity<Order>()
        .HasOne(_ => _.User)
        .WithMany(_ => _.Orders)
        .HasForeignKey(_ => _.UserId);
}

来源:https ://docs.microsoft.com/en-us/ef/core/modeling/relationships?tabs=fluent-api%2Cfluent-api-simple-key%2Csimple-key


推荐阅读