1

Ich habe die folgenden zwei Klassen in einer C# ASP.Net-Anwendung Entity Framework Code-erste EinrichtungC# EF API-Controller nicht viele zu viele Array geladen

Facility Class;

public class Facility 
{ 
    public int Id { get; set; } 
    public string Name {get; set; } 
    public ICollection<SubscriberList> SubscriberLists {get; set;} 
} 

SubscriberList Klasse;

Public class SubscriberList 
{ 
    public SubscriberList() 
    { 
     Facilities = new HashSet<Facility>(); //not sure if I need this. 
    } 
    public int Id { get; set; } 
    public int ClientId { get; set; } 
    public ICollection<Facility> Facilities { get; set; } 
} 

Mit der folgenden Konfiguration;

public class SubscriberListConfiguration : EntityTypeConfiguration<SubscriberList> 
{ 
    public SubscriberListConfiguration() 
    { 
     HasMany(w => w.Facilities) 
      .WithMany(s => s.SubscriberLists) 
      .Map(m => 
      { 
       m.ToTable("SubscriberListFacilities"); 
       m.MapLeftKey("SubscriberListId"); 
       m.MapRightKey("FacilityId"); 
      }); 
    } 
} 

Jetzt habe ich folgendes ApiController

public List<SubscriberList> GetSubscriberLists() 
{ 
    var list = _context.SubscriberLists 
     .Include(c => c.Facilities) 
     .ToList(); 
    return list; 
} 

Wenn Sie mit dem/api die Get-Anfrage Aufruf/SubscriberLists ich folgendes Json erhalten, die die "Einrichtungsname"

[ 
    { 
     "Id": 2, 
     "ClientId": 1000001, 
     "Facilities": [ 
      { 
       "$id": "1" 
      } 
     ] 
    }, 
    { 
     "Id": 3, 
     "ClientId": 1000002, 
     "Facilities": [ 
      { 
       "$id": "2" 
      }, 
      { 
       "$id": "3" 
      } 
     ] 
    } 
] 
fehlt

Wie Sie sehen können, gibt es nicht die Facility.Name, nur die Facility.Id. Ich habe versucht, indem Sie das virtuelle Schlüsselwort vor der ICollection hinzufügen. Versuchte Änderung ICollection<> zu IList<> sowie zu List<> Auch versucht, das Attribut [JsonProperty("Facilities")] oben auf dem Feld Facilities hinzuzufügen. Es wurde auch versucht, die zurückgegebene Liste zu durchlaufen und die Einrichtungen abzufragen, um das Laden auszulösen. Nichts half bisher.

Die interessante Sache ist, dass im Debug-Modus kann ich sehen, alles wie erwartet geladen, ich sehe alle Facility.Name Felder ausgefüllt. Ich fürchte, das Problem liegt hier am Json-Serializer, aber ich habe keine Ahnung, wie ich das beheben soll.

Was ist mein nächster Schritt?

Vielen Dank im Voraus

bearbeiten;

Es lohnt sich hinzuzufügen. Beim Navigieren zu der API-URL im Browser, was dazu führt, dass XML-Daten anstelle von JSON abgerufen werden, erhalte ich das folgende Ergebnis im Array Facilities.

<Facilities> 
    <Facility xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="i1"/> 
</Facilities> 
+1

sind ein wenig aus, vielleicht, ist versuchen, dass die Anlage mit der ID 4 hat einen anderen Namen 'null' dann in Ihrem DB? –

+0

@VadimMartynov Ja, die Facility Id 4 (jetzt 2) hat einen Namen, aber das ist noch merkwürdiger, dass die zurückgegebenen $ id Nummern nicht wirklich von der Datenbank sind, sondern nur für jede Instanz in den zurückgegebenen Daten. (Ich habe einige der Antworten der Einfachheit halber weggelassen. Ich habe sie jetzt auf 1,2 und 3 aktualisiert) –

+1

Das klingt nach dem Ergebnis des JSON-Serialisierers ['ReferenceLoopHandling'] (http://www.newtonsoft.com/json/help/) html/SerializationSettings.htm) auf 'Ignore' setzen. Haben Sie Probleme, JSON zu deserialisieren? –

Antwort

1

Ich denke, Ihre Zuordnung dieses Sie sicher

modelBuilder.Entity<Facility>() 
.HasMany<SubscriberList>(s => s.Facilities) 
.WithMany(c => c.SubscriberLists) 
.Map(cs => 
{ 
    cs.MapLeftKey("FacilityId"); 
    cs.MapRightKey("SubscriberListId"); 
    cs.ToTable("SubscriberListFacilities"); 
}); 

Configure Many-to-Many relationship

+0

Ich bin nicht wirklich sicher, was Sie in Ihrer Antwort hinzugefügt haben. Das einzige, was ich sehe, ist, dass Sie die Konfiguration mit der Einrichtung gestartet haben, während ich die Konfiguration mit der SubscribeList gestartet habe. (In vielen zu vielen Beziehung gibt es keinen Unterschied, in welcher Klasse Sie die Konfiguration vornehmen) Ich habe die Frage aktualisiert, um die gesamte Konfigurationsklasse einzuschließen, damit Sie das ganze Bild bekommen. Lassen Sie es mich wissen, wenn Sie noch sehen, dass ich irgendetwas von Ihrer Antwort vermisst habe. Danke. –

+0

Mehr. Ich glaube nicht, dass das Problem hier in meiner Kartierung liegt. Die Datenbank sieht genau wie erwartet aus, und ich habe die korrekten Ergebnisse mit dem normalen MVC-Controller, und ich sehe die korrekten Daten im Debug-Modus, wenn ich Einheimische untersuche. Das einzige Problem hier ist, wenn es darum geht, die Daten über den "API" -Controller zu bekommen. –

+0

Ich sehe, es könnte ein Problem mit Include in Ihrem Fall geben. http://stackoverflow.com/questions/28055327/entity-framework-include-is-not-working-within-complex-query. – Nonik