2016-03-21 33 views
1

Çok mülk doldurmamak Ben bir çok-çok ilişkisi içinde Temalar Hoparlörler map tanımlanan aşağıdaki POCO sınıfları:Ef6'yı Birçok

public class Speaker 
{ 
     public int Id { get; set; } 
     public string Firstname { get; set; } 
     public string Surname { get; set; } 

     public virtual ICollection<SpeakerTalkTheme> TalkThemes { get;set; } 
} 

public class SpeakerTalkTheme 
    { 
     [Key, Column(Order = 0)] 
     public int TalkThemeId { get; set; } 

     [Key, Column(Order = 1)] 
     public int SpeakerId { get; set; } 

     public TalkTheme TalkTheme { get; set; } 


     public Speaker Speaker { get; set; } 
    } 
} 

public class TalkTheme 
    { 
     public int Id { get; set; } 
     public string Theme { get; set; } 

     public int Length { get; set; } 

     public virtual ICollection<ThemeTag> ThemeTags { get; set; } 
     public virtual ICollection<SpeakerTalkTheme> TalkThemes { get;set; } 
    } 

Ancak, veritabanını sorgulamak ve WebAPI dan döndüğünüzde şöyle: Ben temalar özelliğinde BOŞ olsun

public class SpeakerController : ApiController 
    { 
     public IEnumerable<Speaker> Get() 
     { 
      var db = new MyDbContext(); 
      var model = db.Speakers.Include(x => x.TalkThemes).ToList(); 
      return model; 
     }  
    } 

(aşağıya bakınız):

[ 
    { 
    "TalkThemes": [ 
     { 
     "TalkThemeId": 1, 
     "SpeakerId": 1, 
     "TalkTheme": null 
     } 
    ], 
    "Id": 1, 
    "Firstname": "Joe", 
    "Surname": "Bloggs" 
    } 
] 

değil Olmalı TalkTheme özelliği nüfuslu mu? Şu anda sadece NULL gösteriyor ve bu nüfusun nasıl elde edileceğine dair hiçbir fikrim yok.

cevap

1

Başka bir seviye yüklemeniz gerekiyor. senin Include görüşmesinde aşağıdaki yapın:

//... 
var model = db.Speakers.Include(x => x.TalkThemes.Select(tt=>tt.TalkTheme)).ToList(); 

sen nasıl bir sorguda çeşitli düzeylerde yüklemek için diğer örnekleri bu msdn page yılında Açıklamalar bölümünü kontrol etmek istiyorsanız

.