2011-10-03 66 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

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