2011-10-03 65 views
0

我創建了一個複雜的對象,它本身包含另一個對象的列表。發送自定義複雜對象到Silverlight RIA服務

例子:

public class MyClass1 
{ 
    private List<MyClass2> myClass2List 

    [Key] 
    public long Id { get; set; } 

    public string Name { get; set; } 

    [Include] 
    [Association("FK_MyClass1_MyClass2", "Id", "MyClass1Id")] 
    public List<MyClass2> MyClass2List 
    { 
     get 
     { 
      if (this.myClass2List == null) 
      { 
       this.myClass2List = new List<MyClass2>(); 
      } 

      return this.myClass2List; 
     } 
     set { this.myClass2List = value; } 
    } 
} 

public class MyClass2 
{ 
    [Key] 
    public long Id { get; set; } 

    public string Value { get; set; } 

    public long MyClass1Id { get; set; } 
} 

現在我想給MyClass1的(其中其MyClass2List已滿)的實例向RIA服務。

我的第一次嘗試是創建一個MyClass1返回類型的get方法(以公開MyClass1),併爲MyClass1和MyClass2創建一個Insert方法。它的作品,但MyClass2插入方法是沒用的!我在MyClass1方法中插入所有信息。 get方法也沒用!

這是工程領域的服務:

[EnableClientAccess] 
public class MyDomainService : DomainService 
{ 
    public MyClass1 GetMyClass1() 
    { 
     return null; 
    } 

    [Insert] 
    public void Insert(MyClass1 myClass1) 
    { 
     ... (Main code) 
    } 

    [Insert] 
    public void Insert(MyClass2 myClass2) 
    { 
     // I leave this method empty because I do the job in MyClass1 Insert method. 
     // If I don't add this method the Add operation on MyClass2List will not work! 
    } 
} 

正如你看到它並沒有一個明確的執行。儘管我可以使用傳統的啓用WCF Silverlight的服務,並且只需使用一種方法插入MyClass1實例。

請注意,我嘗試了[Invoke]方法(一個簡單的調用方法,它將MyClass1作爲輸入參數),但是「MyClass1.MyClass2List」爲空!

如何將一個複雜的對象發送到RIA服務而沒有這種無用的方法和髒實現?我需要用一種方法來完成我所有的作品。我不需要在這裏跟蹤等。使用RIA之外的傳統WCF服務更好嗎?還是有另一種關於RIA的方式?

在此先感謝

+0

關於「創造與MyClass1的返回類型的查詢方法」,任何RIA查詢假設一個IEnumerable或IQueryable的返回類型。它不支持返回單個對象的概念。 –

+0

但它的工作方式與我使用的方式完全相同! –

+0

對不起,你的回覆沒有意義。你說過「get方法也沒用!」以及聲明您試圖從查詢中返回單個值。我正在評論爲什麼這不起作用。 –

回答

0
+0

謝謝!通過使用[Compostion],我可以刪除多餘的Insert方法。但是,我必須爲根類創建一個「Get」或「Query」方法。 –

+0

看來這是RIA服務和DTO的缺陷之一。你可以在這裏閱讀更多關於它的信息:http://sklementiev.blogspot.com/2010/03/ria-and-dto.html&http://sklementiev.blogspot.com/search/label/WCF%20RIA – VahidN

0

在客戶端,您只需撥打的域範圍內的SubmitChanges。然後RIA爲您調用適當的插入方法。

+0

我知道,我這麼做!這不是我的問題! –

+0

爲什麼你需要在域服務的單一方法中完成所有工作? –

+0

因爲我的操作是原子操作,所以需要批量插入。 –