I have three layers of tables in an existing database and I'm trying to include the bottom level records when I get the middle level data... This should be a one to many relationship - for shipment x with product y there are z analysis results.
public class Shipment { [Key] public int Id { get; set; } public string ShipName { get; set; } public DateTime ShipmentDate { get; set; } } public class ShipmentDetails { [ForeignKey ("ShipmentId")] public int Id { get; set; } [ForeignKey ("ProductId")] public int ProductId { get; set; } Public double Weight { get; set; } public virtual ShippingAnalysis Analysis { get; set; } } public class ShipmentAnalysis { [ForeignKey ("ShipmentId")] public int Id { get; set; } [ForeignKey ("ProductId")] public int TenantId { get; set; } [ForeignKey ("MetricId")] public int MetricId { get; set; } Public double Result { get; set; } } I'm using the fluent api way of defining the composite primary keys.
modelBuilder.Entity<ShippingDetail>() .HasKey(c => new { c.ShipmentId, c.ProductlId }); modelBuilder.Entity<ShippingAnalysis>() .HasKey(c => new { c.ShipmentId, c.ProductId, c.MetricId }); I get the Shipping detail with the (one to many) analysis records.
var results = _context.ShippingDetail.Include(sd => sd.Analysis) .Where(sd => sd.ShipmentId == id); This does not return a result in postman, but through the browser returns malformed JSON. If I drop the include, it works fine.