1

EF Code First を使用して Web Api + Ko + Breeze で ASP.NET MVC4 を使用したシングル ページ アプリを開発しています。

私たちの(簡略化された)データモデルは次のようになります

class Product {
    public String Name { get; set; }
    public ICollection<ImageCollection> ImageSets { get; set;}
    public Image DefaultImage { get; set; }
}

class ImageCollection {
    public ICollection<Image> Images { get; set; }
}

class Image {
    public String ImageUrl { get; set; }
}

DefaultImage はナビゲーション プロパティ (外部キーを使用) であり、ImageSet 内の画像の 1 つです。

Products() の Web API メソッドと、デフォルトの Breeze 構成を公開しています。ワイヤ上の JSON シリアル化出力にはオブジェクト (つまり、PreserveReferencesHandling.Object) の参照があるため、ImageUrl ko をバインドしたいときに値を解決できません。

HTMLはこんな感じ

 <img data-bind="attr: { src: DefaultImage().ImageUrl, title: Name}" />

シリアライザーを PreserveReferencesHandling.None に切り替えると、バインディングが機能します。

質問: デフォルトの構成を機能させるにはどうすればよいですか? または、Breeze の PreserveReferencesHandling.None に切り替えた場合、落とし穴/欠点は何ですか?

ありがとう!

4

1 に答える 1

2

一般に、PreserveReferencesHandling を None に切り替えたくないのは、循環参照をシリアル化する機能が失われ、ペイロードがはるかに大きくなるためです。

これを設定した後にバインディングが機能し始める理由が実際にはわかりません。これを理解するための最初のステップは、クエリの後で ko オブジェクトに実際に正しいデータが含まれていることを確認することです。

微風ナビゲーション プロパティは遅延読み込みされるため、最初のクエリで読み込んでいない可能性があることに注意してください。「EntityAspect.loadNavigationProperty」メソッドを見てください。

于 2012-11-28T17:20:33.023 に答える