3

車の履歴を含むデータベースがあります。各車の履歴には、複数の画像が関連付けられています。NHibernate 2.2を使用して関係を設定していますが、CarHistoryマッピングには画像用のバッグが含まれています。

<bag name="Photos" table="DetailPhoto" cascade="all" lazy="true">
  <key column="CAR_DETAIL_ID"/>
  <one-to-many class="DetailPhoto"/>
</bag>

JSONを使用してサーバーと通信するiPadアプリがあります。すべての車の履歴アイテムをiPadのリストにロードしたいのですが、データの取得が遅くなるため、リストをロードするときに写真を含めたくありません。そのため、写真を怠惰にしました。

JsonConvert.SerializeObjectを使用して車の履歴のリストをシリアル化しようとすると、遅延初期化例外が発生します。これは、オブジェクトをロードし、写真が不要でJsonSerializerがすべてのオブジェクトのプロパティ。

写真なしでJsonデータをクライアントに返したいのですが、他の状況でこのコレクションをロードしたいので、オブジェクトでignoreJsonPropertyを使用できません。

私はこれを試しましたが、それは私に怠惰な初期化例外を与える同じことをします: http ://www.royjacobs.org/2011/07/27/using-json-net-to-serialize-proxied-nhibernate-objects/

これは私のCarHistory(CarDetail)クラスです

 public class CarDetail
{
    [JsonProperty("id")]
    public virtual int Id { get; set; }

    [JsonProperty("carId")]
    public virtual int CarId { get; set; }

    [JsonProperty("date")]
    public virtual DateTime ? Date { get; set; }

    [JsonProperty("details")]
    public virtual string Details { get; set; }

    [JsonProperty("photos")]
    public virtual IList<DetailPhoto> Photos { get; set; }
}

だから私の質問は、ある状況では関連する写真なしでCarHistoriesのリストを取得するにはどうすればよいですか?

4

2 に答える 2

2

このような場合、「接続された」ドメイン オブジェクトとシリアライゼーション フォーマットの間にレイヤーを配置したいことがよくあります。私は通常、データ転送オブジェクトを作成します。これはドメイン モデル オブジェクトに似ていますが、通常は直接的な関連付けはなく、代わりに ID のリストだけを持っています。次に、Automapperを使用して、データ転送オブジェクトとドメイン オブジェクトをマッピングします。

于 2012-09-25T05:14:55.647 に答える