2

遅延ロードされた多くの仮想プロパティを持つクラスを取得しました

public class TestPlan
{
    public virtual ICollection<Test> Test { get; set; }
    public virtual Commercial Commercial { get; set; }
    ...
}

このクラスは、プログラムの後半でシリアル化する必要があります。問題は、これらのプロパティが仮想であるため、シリアル化しようとするたびにエラー (循環参照) が発生することです。ここに私の質問があります

私の上司は、彼が View Object と呼んでいるものを使用するように私に言いました。これは同じオブジェクトですが、未使用のプロパティはありません。これについてどう思いますか?これらの未使用のプロパティを null または何かに設定する必要がありますか?

背景:

シリアル化されたオブジェクトは、インフラジスティックス グリッド (適切な配列) で使用されることを意図しています。[ScriptIgnore]バーチャルでこの属性を使用しようとしましたが、うまくいきませんでした。

また、TestPlans を取得しようとしましdatabase.TestPlans.AsNoTracking().ToList()たが、エラーが発生しました (オブジェクトが NoTracking マージ オプションで返された場合、Load は EntityCollection または EntityReference にオブジェクトが含まれていない場合にのみ呼び出すことができます)。

前もって感謝します

4

1 に答える 1

1

上司がビューオブジェクトを含むDataTransferObjectを意味する場合、上司は正しい方向に進んでいるようです。これは、ASPではViewModelオブジェクトと呼ばれることもあります。これは、モデルオブジェクトのフラット化されたバージョンを表す単なるPOCOです(フラット化にAutoMapperを使用するものもあります)

モデルオブジェクトを変更するのではなく、シリアル化の目的で新しいオブジェクト(おそらくフラット化)を作成する必要があります。このオブジェクトはデータだけの動作を持たず、シリアル化のコントラクトを表します。

サンプルコードから循環参照を確認することはできませんが、必要に応じて、フラット化によって循環参照を解決する方法を示す無関係のコード例を提供することができます。(モデルを知らずに行うのは難しい)

于 2012-10-30T10:13:00.293 に答える