Can someone guide me on how to construct the proper property navigation on the below tables?
I have these tables in my database:
I then need to relate the Status
table to get the status Name
on every table
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
.
But if you notice on the 2nd snip, the status is 3
which is the Id
of the Company.
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();