Wenn ich eine Patch-Methode ausführen, die updateAsync(id,patch)
ausgeführt wird, komme ich in eine unendliche Referenzschleife, die mit dem Server abstürzt mit out of memory Ausnahme stoppt .Azure Mobile Services Tabellencontroller updateAsync endet in Speichermangel Ausnahme
So habe ich die Modelle
public class User : EntityData
{
public string Username { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
public virtual ICollection<Foo> Foos { get; set; }
}
public class Bar: EntityData
{
public string FooId { get; set; }
public string UserId { get; set; }
public enum enumStatus { get; set; }
public virtual Foo Foo { get; set; }
public virtual User User { get; set; }
}
public class Foo: EntityData
{
public string Title { get; set; }
public string UserId { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
public virtual User User { get; set; }
}
und die tablecontroller Patch Aktion sieht wie folgt aus
public Task<Bar> PatchInvited(string id, Delta<Bar> patch)
{
return UpdateAsync(id, patch);
}
Also ich versuche enumStatus Bars zu patchen und dann fühlt es sich wie es durch alle damit verbundenen entites beginnt looping und fängt an, sie auch zu aktualisieren. Wie kann ich das lösen? Vielleicht sollte ich meine Erbschaft überdenken
Update 1: Nach weiterer Untersuchung scheint es alle verwandten Entitäten zu laden, ohne dass ich danach frage. Warum passiert dies?
Entsprechende Entitäten werden geladen, da Ihre 'Navigationseigenschaften' als' virtuell' gekennzeichnet sind, dh lazy loaded. Ich würde empfehlen, 'Data Transfer Objects' zu verwenden, um die korrekten Daten abzubilden, die vom Dienst benötigt werden, anstatt alles zu laden (langsame, unendliche Schleifen usw.). Haben Sie eine relevante Ausnahme-Nachricht? – SWilko
Okay, also ein DTO zu lösen, aber ich verstehe nicht, warum es alle virtuellen Daten lädt? Wenn Sie ein DTO machen, wird die Idee, ODATA zu verwenden, gebrochen? –