Good day! I had a problem! I can not understand why I do not get the Result model.

Here are the data models.

public class Claims { public int id_claim { get; set; } public string description { get; set; } public ICollection<ClaimResultsHistories> ClaimResultsHistory { get; set; } } public class ClaimResultsHistories { public int? id_result_history { get; set; } public int? id_claim { get; set; } public int? id_result { get; set; } public string note { get; set; } public DateTime? date_add { get; set; } public Claims Claims { get; set; } public Results Results { get; set; } } public class Results { public int? id_result { get; set; } public string result { get; set; } public int? id_result_type { get; set; } public ICollection<ClaimResultsHistories> ClaimResultsHistories { get; set; } } 

this is the data context

  modelBuilder.Entity<ClaimResultsHistories>().HasKey(k=>k.id_result_history).Property(p=>p.id_result_history).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); modelBuilder.Entity<Results>().HasKey(k => k.id_result).Property(p => p.id_result).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity); modelBuilder.Entity<Claims>() .HasKey(k => k.id_claim) .HasMany(k => k.ClaimResultsHistory) .WithRequired(k => k.Claims) .HasForeignKey(k => k.id_claim) .WillCascadeOnDelete(false); modelBuilder.Entity<Results>() .HasKey(k => k.id_result) .HasMany(k=>k.ClaimResultsHistories) .WithRequired(k=>k.Results) .HasForeignKey(k => k.id_result) .WillCascadeOnDelete(false); 

and the controller itself

 public class ClaimsController : ApiController { private ClaimContext db = new ClaimContext(); public IQueryable<DTO> GetClaims() { var result = from b in db.Claims select new DTO { id_claim = b.id_claim, description = b.description, ClaimResultsHistory = b.ClaimResultsHistory, }; return result; } } public class DTO { public int id_claim { get; set; } public string description { get; set; } public ICollection<ClaimResultsHistories> ClaimResultsHistory { get; set; } } 

And I get this answer

 "id_claim": 1, "description": "TEST", "ClaimResultsHistory": [ { "id_result_history": 1, "id_claim": 1, "id_result": 2, "note": "NOTE TEST", "date_add": "2016-04-21T19:57:50.477", "Claims": null, "Results": null }, { "id_result_history": 2, "id_claim": 1, "id_result": 4, "note": "NOTE 2 TEST", "date_add": "2016-04-21T19:57:58.38", "Claims": null, "Results": null } 

Can you please tell me what am I doing wrong?

    1 answer 1

    Entity Framework uses Lazy Loading to load related objects and collections. But for this to work as it should, the properties of the model objects must be virtual :

     public class Claims { public int id_claim { get; set; } public string description { get; set; } public virtual ICollection<ClaimResultsHistories> ClaimResultsHistory { get; set; } } public class ClaimResultsHistories { public int? id_result_history { get; set; } public int? id_claim { get; set; } public int? id_result { get; set; } public string note { get; set; } public DateTime? date_add { get; set; } public virtual Claims Claims { get; set; } public virtual Results Results { get; set; } } public class Results { public int? id_result { get; set; } public string result { get; set; } public int? id_result_type { get; set; } public virtual ICollection<ClaimResultsHistories> ClaimResultsHistories { get; set; } }