向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 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!
    }
}

如你所见,它没有一个清晰的实现。虽然我可以使用传统的支持silverlight的WCF服务,并简单地使用一个方法来插入MyClass1实例。

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

我如何发送一个复杂的对象到RIA服务,而没有这样无用的方法和肮脏的实现?我需要用一种方法完成所有的工作。我不需要跟踪等等。除了RIA之外,使用传统的WCF服务更好吗?或者RIA有其他方法吗?

Thanks in advance

  • 你还需要为你的一对多关系添加[Composition]属性。[+, +, +]
  • 也尝试切换到"RIA服务EF代码优先支持"

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

相关内容

  • 没有找到相关文章

最新更新