2016-09-14 8 views
1

Ich bin mir nicht sicher, wie Include (..). ThenInclude (...) im Kontext einer many-> many Beziehung definiert wird.Viele Navigationseigenschaften in EF-Core füllen

Das also ist die nav Eigenschaft bevölkern, SiteEducators der Link

var site = this._dbContext.Sites.Include(x => x.SiteEducators).FirstOrDefault(); 

pro der Dokumentation definiert ist

public DbSet<Educator> Educators { get; set; } 
    public DbSet<Site> Sites { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     #region Site->Educator Link 
     modelBuilder.Entity<SiteEducator>() 
      .HasKey(t => new { t.SiteId, t.EducatorId }); 

     modelBuilder.Entity<SiteEducator>() 
      .HasOne(pt => pt.Site) 
      .WithMany(p => p.SiteEducators) 
      .HasForeignKey(pt => pt.SiteId); 

     modelBuilder.Entity<SiteEducator>() 
      .HasOne(pt => pt.Educator) 
      .WithMany(t => t.SiteEducators) 
      .HasForeignKey(pt => pt.EducatorId); 
     #endregion 
    } 

Problem ist, wenn ich „site“ debuggen es hat die Navigationseigenschaft und ich kann Den Wert von "EducatorId" sehen Sie gut, aber die Navigationseigenschaft von IT Educator ist null.

model.SiteEducators.FirstOrDefault().Educator 

So würde dies null sein, wo dies einen Wert

model.SiteEducators.FirstOrDefault().EducatorId 

Beispiel von dem, was ich meine zurückkehren würde:

enter image description here

enter image description here

Es muss eine Art "ThenInclude" auf dem Array geben?

Wie stelle ich dieses andere Objekt dar, was ist das Synatax, irgendeine Idee?

Jede Hilfe wäre toll, thx Jungs :)

+0

können Sie auch Ihren Modellcode eingeben? – Sampath

+0

Sicher, werde ich auf meinem Telefon und kann nicht wirklich ... Aber es ist direkt aus der Dokumentation. https://docs.efproject.net/en/latest/modeling/relationships.html#many-to-many –

+0

Docs einfach nicht sagen, wie die Daten zu füllen:/ –

Antwort

0

Okay, so sieht es aus wie es eine Reihe von git Probleme ist, ist dies der fix:

1) Karte Ihr Link Tabellenobjekt in Ihrem ApplicationDbContext.

public DbSet<SiteEducator> SiteEducator { get; set; } 

(Nebenbei bemerkt: Didnt es pluralize, weil die DB-Tabelle, die aus nur den regulär viel> Viele Setup es nicht pluralize hat generiert wurde, nicht nichts nur für den Fall duplizierende)

2) Führen Sie nun nach der ersten Abfrage eine zweite Abfrage zum Laden der Datenelemente aus. Sie müssen nicht sie überall EF zuweisen sollte gerade jetzt wissen, dass sie in das Stammobjekt geladen werden

var site = this._dbContext.Sites 
       .Include(x => x.SiteEducators) 
       .Include(x => x.Studies) 
       .FirstOrDefault(x => x.SupervisorToken == key); 


//Dummy query to load the data 
this._dbContext.SiteEducator.Include(x => x.Educator).Where(x => x.SiteId == site.Id).Load(); 

Das Problem die Dokumentation ist es, die wichtige Rolle in der Verknüpfungstabelle des Abbildens auslassen, ohne dass es doesnt zu sein scheinen eine Möglichkeit, die verschachtelten Objekte in der Liste zu laden.

+0

funktioniert das für Sie? – Sampath

Verwandte Themen