RIA サービスを使用する Silverlight 5 ビジネス アプリケーションを使用して、サービス側から POCO クラスを返し、階層メニューを作成しています。
POCO クラスで最初に発生した問題は、SubMenuItems プロパティがサービス側で設定されているにもかかわらず、RIA サービスを介して渡されないことでした。
オリジナルポコ
public class BusinessModelMenuDto
{
[Key]
[Required]
public int ID { get; set; }
public string TextToDisplay { get; set; }
public string ImageSource { get; set; }
public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; }
}
サービスコール
public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy()
さらに調査した結果、SubMenuItems でデータを渡すには属性[Include]
と属性が必要であることがわかりました。[Association]
ID => ID の関連付けで初めてこれを行っても、望ましい結果が得られなかったので、ParentID プロパティを追加し、読み込みコードを変更して、以下のように外部キーを設定しました。また、Associate を ID から Parent ID にマップするように変更しました。
更新された POCO クラス
public class BusinessModelMenuDto
{
[Key]
[Required]
public int ID { get; set; }
public int? ParentID { get; set; }
public string TextToDisplay { get; set; }
public string ImageSource { get; set; }
[Include]
[Association("SubItems", "ID", "ParentID")]
public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; }
}
サーバー側では、現在 2 つのレベルのメニューをロードしているため、トップ レベルのアイテムには SubItems のコレクションが含まれていますが、その下にそれ以上の SubItems はありません。
私が抱えている問題は、RIA サービスがネットワーク経由でコレクションを送信するときに、階層がごちゃ混ぜになることです。返されたものが正しく構造化されていることを確認しましたが、クライアント側に正しく届きません。トップ レベルは問題ありませんが、2 番目のレベル (SubMenuItems) が混同されており、さらに 2 つの SubMenuItems レベルが表示されています。
私が間違っていることは何ですか?問題は、Association または同じ POCO オブジェクト (BusinessModelMenuDto) が複数のレベルで使用されているという事実にあると思います。