【问题标题】:Silverlight is not fetching data from my WCF RIA serviceSilverlight 没有从我的 WCF RIA 服务中获取数据
【发布时间】:2010-07-06 12:25:08
【问题描述】:

我刚开始浏览 Channel9 上发布的实验室来学习 Silverlight。当我尝试稍微探索一下时,我发现我的查询并没有像我想象的那样工作。

要重新创建我所做的,您需要创建一个新的 Silverlight Business 应用程序,创建一个指向 Adventureworks LT db 的数据实体,并为这些实体生成 Web 服务(包括编辑)。

然后,我将 RichTextbox 简单地添加到 Home.xaml 中,然后在 Home.xaml.cs 中,我首先将此代码添加到 OnNavigatedTo 中,但当它对构造函数不起作用时。

    AdventureWorksDomainContext ctx = new AdventureWorksDomainContext();

    EntityQuery<Product> query =
        from p in ctx.GetProductsQuery()
        select p;
    LoadOperation<Product> loadOp = ctx.Load(query);

    var paragraph = new Paragraph();
    foreach (var product in loadOp.Entities)
    {
        paragraph.Inlines.Add(new Run { Text = product.Name });
    }

    richTextBox1.Blocks.Add(paragraph);

当我运行该页面时,我从来没有看到 loadOp.Entities 包含一个值,我只看到我期望的查询,在我的所有代码都执行后通过线路。

我觉得我错过了一些基本的东西,如果我能找到人向我解释这将更有意义。

谢谢, 埃里克

【问题讨论】:

    标签: wcf silverlight ria


    【解决方案1】:

    问题与您加载数据的方式有关。实际的 Load 操作是异步的,所有 Silverlight 网络调用也是如此。您正在调用ctx.Load(query),然后立即将段落设置为实体。当Load 完成时,您需要使用回调。像这样的,

        AdventureWorksDomainContext ctx = new AdventureWorksDomainContext();
    
    EntityQuery<Product> query =
        from p in ctx.GetProductsQuery()
        select p;
    LoadOperation<Product> loadOp = ctx.Load(query,() => 
    {
        var paragraph = new Paragraph();
        foreach (var product in loadOp.Entities)
        {
            paragraph.Inlines.Add(new Run { Text = product.Name });
        }
    
        richTextBox1.Blocks.Add(paragraph);
    });
    

    由于您没有直接在绑定中使用实体并且只是迭代它们,因此您需要确保等到它们被加载。我不记得 Load 方法的实际签名,所以你可能需要修改我的 lambda 以使其工作。

    【讨论】:

    • 您所说的很有道理,我需要将其视为 AJAX 调用。今晚回家我会试试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多