将自定义复杂对象发送到Silverlight RIA服务

时间:2011-10-03 07:51:00

标签: silverlight wcf-ria-services batch-insert

我创建了一个复杂的对象,它本身包含另一个对象的列表。

示例:

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返回类型(公开MyClass1)创建一个get方法,并为MyClass1和MyClass2创建一个Insert方法。它工作但MyClass2 Insert方法没用!我在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-Enabled服务,只需使用一种方法来插入MyClass1实例。

请注意,我尝试了[Invoke]方法(一个简单的调用方法,它将MyClass1作为输入参数)但是“MyClass1.MyClass2List”是空的!!!

如何在没有这些无用的方法和脏实现的情况下将复杂对象发送到RIA服务?我需要用一种方法完成所有工作。我这里不需要跟踪等。除了RIA之外,使用传统的WCF服务是否更好?还是有另外一种关于RIA的方式?

提前致谢

2 个答案:

答案 0 :(得分:0)

在客户端上,您只需在域上下文中调用SubmitChanges。 RIA然后为您调用适当的插入方法。

答案 1 :(得分:0)