Entity Framework Npgsql 不可能获取外键实体的核心

Entity Framework Core getting Forein Key entities not possible with Npgsql

我在 Entity Framework 核心的 Npgsql 中遇到了一个奇怪的行为:

我的模特:

public class Customer
{
    public Customer()
    {
        Numbers = new List<TelephoneNumber>();
        Emails = new List<Email>();
    }
    public int CustomerId { get; set; }
    public string FirstName { get; set; }
    public string SecondName { get; set; }

    public Address Address { get; set; }

    public List<TelephoneNumber> Numbers {get;set;}

    public List<Email> Emails { get; set; }

    public string Note { get; set; }
}

public class Address
{
    public int AddressId { get; set; }
    public string Street { get; set; }
    public int HouseNumber { get; set; }

    public int Code { get; set; }

    public string City { get; set; }

    public int CustomerId { get; set; }
    public Customer Customer { get; set; }
}

public class Email
{
    public int EmailId { get; set; }

    public string Address { get; set; }

    public int CustomerId { get; set; }
    public Customer Customer { get; set; }
}

public class TelephoneNumber
{
    public int TelephoneNumberId { get; set; }

    public string Number { get; set; }

    public int CustomerId { get; set; }
    public Customer Customer { get; set; }
}

还有我的 DbContext:

public class CustomerContext : DbContext
{
    public CustomerContext(DbContextOptions<CustomerContext> options) : base(options)
    {}
    public DbSet<Customer> Customers {get; set;}
    public DbSet<Address> Addresses { get; set; }

    public DbSet<Email> Emails {get;set;}
    public DbSet<TelephoneNumber> Numbers {get;set;}

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Customer>().HasKey(m => m.CustomerId);
        builder.Entity<Address>().HasKey(m => m.AddressId);
        builder.Entity<Email>().HasKey(m => m.EmailId);
        builder.Entity<TelephoneNumber>().HasKey(m => m.TelephoneNumberId);

        base.OnModelCreating(builder);
    }
}

我已成功连接到 postgresql 数据库,并且使用 "dotnet ef migrations add initPG" 和 "dotnet ef database update" 创建了模式,没有右外键约束等问题。

然后我创建一个客户:

var created = _context.Customers.Add(cust);
_context.SaveChanges();

客户包含地址、电子邮件和电话号码。

我的问题是当我想从数据库中获取所有客户时:

IEnumerable<Customer> customers = _context.Customers.ToList();

我只得到地址、电子邮件和电话号码属性为空的客户!!

我这里有逻辑上的误解吗!?我认为 EF-Framework 会自动执行 table 连接。 还是我需要自己手动从客户那里获取这些单独的元素?

我在多个来源看到 include 关键字来获取外键属性,但我的 IDE 显示 DbContext 没有 include 方法!

如果您想要 include 扩展方法,请键入

using System.Data.Entity;

或者,如果使用 EF 7,按照 rubiktubik 的建议

using Microsoft.EntityFrameworkCore

在文件的顶部

到那时,你应该可以做到

IEnumerable<Customer> customers = _context.Customers
    .Include(c => c.Emails)
    .ToList();