【问题标题】:Send custom complex objects to Silverlight RIA services将自定义复杂对象发送到 Silverlight RIA 服务
【发布时间】:2011-10-10 13:12:41
【问题描述】:

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

例子:

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

如您所见,它没有明确的实现。虽然我可以使用传统的 WCF Silverlight-Enabled 服务,并且只需使用一个方法来插入 MyClass1 实例。

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

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

提前致谢

【问题讨论】:

  • 关于“创建返回类型为 MyClass1 的查询方法”,任何 RIA 查询都假定返回类型为 IEnumerable 或 IQueryable。它不支持返回单个对象的概念。
  • 但它的工作方式与我使用的完全一样!
  • 抱歉,您的回复没有意义。你说“get方法也没用!”以及说明您尝试从查询中返回单个值。我在评论那不起作用的原因。

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


【解决方案1】:

【讨论】:

【解决方案2】:

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

【讨论】:

  • 我知道,我就是这么做的!这不是我的问题!
  • 为什么需要在域服务上以单一方法完成所有工作?
  • 因为我的操作是原子操作,我需要批量插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多