私はホットタオルテンプレート、すなわちbreezejs、ノックアウト、エンティティフレームワーク(コードファースト)、デュランダルなどを使用したASP.Net MVC SPAを持っています.
私の EF モデルには、自己参照関連を持つ「セクション」という名前のクラスがあります。各セクションは「ドキュメント」に属し、各セクションには「アイテム」のコレクションもあります。
public class Section : CommonBase
{
...
public Guid DocumentId { get; set; }
public Document Document { get; set; }
...
public List<Item> Items { get; set; }
public Guid? ParentId { get; set; }
public Section Parent { get; set; }
public List<Section> Children { get; set; }
...
}
public class Item : CommonBase
{
...
public Guid SectionId { get; set; }
public Section Section { get; set; }
...
}
Breeze クエリと BreezeController メソッドを介してドキュメントを読み込むときに、「セクション」と「アイテム」を読み込みます。
var query = breeze.EntityQuery.from(model.entitySets.document)
.where(predicate)
.expand("sections.items.cloudDriveFile, sections.cloudDriveFile")
.orderBy(model.orderByClauses.document);
return _contextProvider.Context.Documents.Where(x => x.OrganisationId == currentUser.OrganisationId);
「アイテム」をロードせずに「セクション」を編集して保存すると、すべて正常に動作します。ただし、「アイテム」を含むセクションを編集して保存しようとすると、(BreezeController でインクルードを使用するか、javascript で Expand を使用して) それらの「アイテム」をロードすると、次のエラーが発生します。
"Uncaught TypeError: 循環構造を JSON に変換中"
manager.saveChanges() への単純な呼び出しを使用して保存しています。
この循環参照エラーを回避するために実装すべきテクニックやパターンはありますか?