5

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) が複数のレベルで使用されているという事実にあると思います。

4

1 に答える 1

2

Keyクライアントに返す前に、アイテムにGuidを使用し、サーバー上で一意の値を割り当てる必要があることがわかりました。

したがって、クラス定義は次のようになります。

public class BusinessModelMenuDto
{
    [Key]
    [Required]
    public Guid ID { get; set; }
    public Guid? ParentID { get; set; }
    public string TextToDisplay { get; set; }
    public string ImageSource { get; set; }
    [Include]
    [Association("SubItems", "ID", "ParentID")]
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; }
}

次に、新しい要素を作成するときにIDを設定します。

ID = Guid.NewGuid();
于 2013-01-02T12:00:11.280 に答える