updateAsync(id,patch)
を実行するパッチメソッドを実行しているときに、メモリ不足例外が発生してサーバーが停止して停止する無限の参照ループになる。AzureモバイルサービスTablecontroller updateAsyncがメモリ不足例外で終了する
だから私はモデル
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; }
}
を持っているとtablecontrollerパッチアクションはこの
public Task<Bar> PatchInvited(string id, Delta<Bar> patch)
{
return UpdateAsync(id, patch);
}
のように見えるので、私はバーenumstatusにパッチを適用しようとすると、それはすべての関連entitesをループを開始するようにそれは感じていますそれらの更新も開始されます。 どうすればこの問題を解決できますか?たぶん私の遺産を再考すべきです
更新1:それ以上の調査の後、私はそれを求めないで、関連するすべてのエンティティを読み込むようです。なぜこうなった?
関連するエンティティは 'ナビゲーションプロパティ 'として読み込まれ、'仮想 '、すなわち遅延ロードされているとマークされます。私は 'Data Transfer Objects'を使用して、すべてのもの(遅い、無限ループなど)をロードするのではなく、サービスが必要とする正しいデータをマップすることをお勧めします。関連する「例外」メッセージがありますか? – SWilko
さて、DTOを使って解決しましたが、なぜそれがすべての仮想データを読み込むのか分かりません。 ODATAを使用するというアイデアは、DTOのようなものを壊してしまいますか? –