【问题标题】:Problem with domain services in the SilverlightSilverlight 中的域服务问题
【发布时间】:2011-07-20 14:28:04
【问题描述】:

我在 Silverlight RIA WCF 服务应用程序中有以下代码:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    EmployeesService2 context = new EmployeesService2();
    EntityQuery<Employee> query = context.GetEmployeeQuery();
    context.Load(query);
    int count = context.Employees.Count();
    EmployeeGrid.ItemsSource = context.Employees;
}

它用项目填充 Grid,但 context.Employees.Count() = 0。为什么会这样?

另一个问题是我有一个针对不同域服务的另一个页面的类似代码 基于另一个实体模型和数据库。但在这种情况下,服务没有返回任何实体。这可能是什么原因?数据库不为空。

【问题讨论】:

    标签: c# .net silverlight binding domainservices


    【解决方案1】:

    一种可能性是您没有将服务设置为在返回的数据中包含 Employee 表。为此,只需将 [Include] 属性添加到员工的Employees 属性上的元数据文件中(如果发生这种情况)。

    【讨论】:

      【解决方案2】:

      正如其他人所提到的,这是因为 Load 是异步的,并且在没有任何数据的情况下立即返回。您需要响应 Load operations completed 事件。

      您可以像@Levisaxos 所说的那样执行此操作并处理 Completed 事件,或者您可以将回调作为参数传递给 Load。加载操作完成后,将执行此回调。

      像@Levisaxos 所说的那样连接到该事件也应该有效,但您应该记住再次取消订阅该事件,否则您会泄漏内存。

      http://forums.silverlight.net/forums/p/129624/296266.aspx

      【讨论】:

        【解决方案3】:

        context.Load(query) 是一个异步操作。它在后台的网络请求检索数据之前立即返回。您需要按照 Levisaxos 的回答中的指示监听操作完成事件。

        如果你连接了 operation.Completed 事件,但在上下文中仍然看不到任何数据,那么是时候将注意力转向服务器端的域服务了。在对应于 GetEmployeeQuery(可能是 GetEmployee)的域服务方法中设置一个断点,并确保它被调用。然后在模型的实体集合属性中设置断点 - 可能在 mymodel.Designer.cs 中的 ObjectSet Employees 属性中,以查看实际检索到的数据。

        【讨论】:

          【解决方案4】:

          这可能是因为 context.load 在您询问它的项目数时仍在加载。

          试试这个

          var operation = context.Load(query);
          operation.Completed += (s,ea) => 
          {
              int count = operation.Entities.Count();
              EmployeeGrid.ItemsSource = operation.Entities.ToList();
          }
          

          【讨论】:

          • Peter 所有通过 WCF RIA 服务访问的数据都是异步的;您需要遵循的模式是使用上述 lambda 方法或添加事件处理函数(我更喜欢 lambdas)。
          猜你喜欢
          • 2010-11-24
          • 1970-01-01
          • 2012-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 2014-01-16
          相关资源
          最近更新 更多