实体框架核心获取Forein-Key实体与Npgsql不可能

本文关键字:实体 Npgsql 不可能 获取 框架 核心 Forein-Key | 更新日期: 2023-09-27 17:58:39

我在实体框架核心的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"answers"dotnet ref database update"创建的,没有正确的外键约束等问题。。

然后我创建了一个客户:

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

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

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

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

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

我在这里有逻辑上的误解吗!?我认为EF框架会自动进行表联接。或者我需要手动从客户那里获得这些单独的元素吗?

在一些来源中,我看到include关键字来获取外键属性,但我的IDE显示DbContext根本没有include方法!

实体框架核心获取Forein-Key实体与Npgsql不可能

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

using System.Data.Entity;

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

using Microsoft.EntityFrameworkCore

在文件的顶部

到那时,你应该能够进行

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