4

Delta<T> は、単一のオブジェクトではなく、複雑なオブジェクト グラフで使用できますか? 私はそれを使用しようとしましたが、何かが欠けているのか、それとも単に機能がサポートされていないのか疑問に思っています。

たとえば、次のモデルがあります。

public class Person {
  public int Id { get;set; }
  public string Name { get;s set; }
  public Address Address { get; set; }
}

public class Address {
  public string Street { get; set; }
  public string City { get; set; }
  public string PostCode { get; set; }
}

OData モデルの構築は次のとおりです。

var builder = new ODataConventionModelBuilder();
builder.ComplexType<Address>();
builder.EntitySet<Person>("Person");

コントローラーの POST メソッドでは、この JSON を使用でき、正常に逆シリアル化されます。

{
  "Name": "Mr Smith",
  "Address": {
    "Street": "Some Street",
    "City": "Some City",
    "PostCode": "Some PostCode"
  }
}

しかし、PATCH を使用すると問題が発生します。これを送ると:

{ 
  "Name": "Mr Doe",
  "Address": {
    "Street": "Another Street"
  }
}

そして、私のコントローラーメソッドの署名は次のようになります。

public IHttpActionResult Patch([FromODataUri] key, Delta<Person> delta) { ... }

次に、デルタには Address プロパティが含まれ、City と PostCode は null、Street は「Another Street」になります。これは私には正しいようです。

次に delta.Patch(person) を使用して person オブジェクトに変更を適用すると、住所の Street プロパティを更新するだけでなく、この住所を個人に大規模にコピーします。

何か不足していますか、それとも複雑な型のプロパティのパッチは Delta<T> でサポートされていませんか?

4

1 に答える 1