0

私はホットタオルテンプレート、すなわち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() への単純な呼び出しを使用して保存しています。

この循環参照エラーを回避するために実装すべきテクニックやパターンはありますか?

4

3 に答える 3

0

EF モデルがCode FirstDatabase Firstかどうかはわかりませんが、Code Firstの場合、entityModel に ForeignKey プロパティの定義に関係する属性が表示されませんでした。Database Firstの場合は、外部キーの関連付けが有効になっていることを確認してください。詳細については、次のリンクを参照してください:ナビゲーション プロパティサーバー側モデル

于 2013-06-18T06:11:19.623 に答える