123pierre
123pierre

Reputation: 305

ASP API CORE : Get relation Many to One

I have two entities : Article and PrixVariation. One Article has Many Prix variation. One Prix variation has One Article.

public partial class Article
            {
                public Article()
                {            
                    PrixVariations = new HashSet<PrixVariation>();
                }
        
                public int Id { get; set; }
                public DateTime DateTime { get; set; }         
    ... 
                public virtual ICollection<PrixVariation> PrixVariations { get; set; }
    
            }
public partial class PrixVariation
    {
        public int Id { get; set; }
        public DateTime DateTime { get; set; }
        public int Article { get; set; }
        public double Prix { get; set; }

        public virtual Article ArticleNavigation { get; set; } = null!;

    }

My Context is as follow :

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Article>(entity =>
            {
                entity.ToTable("articles");

                entity.Property(e => e.Id).HasColumnName("id");

                
                entity.Property(e => e.DateTime)
                    .HasColumnType("datetime")
                    .HasColumnName("dateTime")
                    .HasDefaultValueSql("(getdate())");

                
            });

 modelBuilder.Entity<PrixVariation>(entity =>
            {
                entity.ToTable("prix_variation");

                entity.Property(e => e.Id)
                    .ValueGeneratedNever()
                    .HasColumnName("id");

                entity.Property(e => e.Article).HasColumnName("article");

                entity.Property(e => e.DateTime)
                    .HasColumnType("datetime")
                    .HasColumnName("dateTime")
                    .HasDefaultValueSql("(getdate())");

                entity.Property(e => e.Prix).HasColumnName("prix");

                entity.HasOne(d => d.ArticleNavigation)
                    .WithMany(p => p.PrixVariations)
                    .HasForeignKey(d => d.Article)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_prix_variation_articles");
            });

And my controller is as follow :

public class ArticlesController : ControllerBase
    {
        private readonly STGEORGESContext _context;

        public ArticlesController(STGEORGESContext context)
        {
            _context = context;
        }

        // GET: api/Articles
        [HttpGet]
        public async Task<ActionResult<IEnumerable<Article>>> GetArticles()
        {
            return await _context.Articles.ToListAsync();
        }
....

There is something not working here because when I launch the debogger, the collection of PrixVaration is always empty :

{"id":1,"dateTime":"2021-11-28T08:37:17","prixVariations":[]}

And of course in the database there is one PrixVaration linked to that Article..

Can anyone can help ?? Thaks a lot !!!

Pierre

Upvotes: 0

Views: 47

Answers (1)

Serge
Serge

Reputation: 43890

It is called lazy loading. Ef doesn't load any object collections if you don't ask about it explicitly. So try this

return await _context.Articles.Include(i=> i.PrixVariations).ToListAsync();

Upvotes: 1

Related Questions