1

私は次のようなデータモデルを持っています

コレクションを含む ModelA。

ModelB にはコレクションが後方参照として含まれています。Include("ModelB") を使用してクエリを実行すると、循環参照が原因で失敗します。良くありませんが、各要素に ModelB.List=null を設定することで解決しました。

問題は、変更された ModelA ツリーを送信することです。ModelB エンティティを ModelA.ModelB[] に追加しています。現在、UpdateEntity 関数は、静的と宣言されているタイプ ModelB の要素を追加できなかったと不平を言っています。JSON デシリアライザーが静的配列を作成しています。

upshot/MVC4 を組み合わせて、完全にフラットではないデータモデルを送信するにはどうすればよいですか? 現在、私が立ち往生していることを理解できる独自のDTOオブジェクトを作成することはできません...

エラーをもう少し詳しく調べたところ、問題は循環後方参照にあると思います。

ModelA->ModelB->ModelA は、データのストレージを壊しています。「ModelA 型のデータを ModelB 型に追加できませんでした」。前述したように、循環参照のシリアル化の問題により、後方参照が Null に設定されました...

私が mroe で制御できる DTO オブジェクトを手動で処理するための簡単な方法になることを願っています。

参照してください: MVC 4、旅の始まりのための Upshot エンティティ循環参照...

4

1 に答える 1

1

循環後方参照を解決するには、ignoreDataMember 属性を使用できます。

public class Customer
{
    [Key]
    public int CustomerId { get; set; }

    public string Name { get; set; }
    public string Address { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }

    public virtual ICollection<Delivery> Deliveries { get; set; }
}

public class Delivery
{
    [Key]
    public int DeliveryId { get; set; }
    public string Description { get; set; }
    public bool IsDelivered { get; set; }

    [IgnoreDataMember]
    public virtual Customer Customer { get; set; }
    public virtual int CustomerId { get; set; }
}

別の質問であなたの問題に対する実用的な解決策を投稿しました: https://stackoverflow.com/a/10010695/1226140

于 2012-04-05T07:18:43.660 に答える