Home > other >  Navigation Property in EF Core is NULL
Navigation Property in EF Core is NULL

Time:09-20

Can someone guide me on how to construct the proper property navigation on the below tables?

I have these tables in my database:

enter image description here

enter image description here

I then need to relate the Status table to get the status Name on every table

enter image description here

These are my model classes:

[Table("Companies")]
public class CompanyEntity
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public int Status_Id { get; set; }

    public DateTime Created_Date { get; set; }

    public DateTime Updated_Date { get; set; }

    [ForeignKey("Status_Id")]
    public Status Status { get; set; }
}

[Table("Customers")]
public class CustomerEntity
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }
    public int Status_Id { get; set; }

}

[Table("Status")]
public class Status
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public Company Company { get; set; }
}

My goal is to when I get all the Companies or Customers using DBContext e.g. var companies = _dbContext.Companies.ToList(). I want to get the status of every record for Companies and Customers. I'm not so sure how to construct the navigation property properly for the said models.

TIA!

Update #1

After following the below suggestion, yes the Status is not NULL anymore. But, it gets the wrong status id. Instead of using the Status_Id, it uses the Id of the Company. Please see below snippets. The status of the said company is 6.

enter image description here

But if you notice on the 2nd snip, the status is 3 which is the Id of the Company. enter image description here

I also have this code in OnModelCreating.

            modelBuilder.Entity<Company>()
                .HasOne<Status>()
                .WithMany()
                .HasForeignKey(p => p.Status_Id);

This is the reason why I get that behavior. But if I removed this, the Status property is gets NULL.

CodePudding user response:

You have to add the .Include() method to join your status table in your result like so:

_dbContext.Companies.Include(c => c.Status).ToList()

CodePudding user response:

The Include is the right approach (at least one of - see loading related data documentation). So add Include as shown below:

db.Companies
    .Include(x => x.Status)
    .ToListAsync();
  • Related