【问题标题】:RIA Services - Silverlight 4.0 - Accessing entities from codeRIA 服务 - Silverlight 4.0 - 从代码访问实体
【发布时间】:2010-08-25 12:55:10
【问题描述】:

我有一个奇怪的情况,我有一个简单的项目来测试 Silverlight 4.0 中的 RIA 功能。

当我将数据源用于域服务时,它工作得很好,但是当我想从代码访问上下文并执行简单查询时,我返回 0 行。

//test One with query provided to DataSource
var q = ctx.GetDoctorsWithPatientsAndHospitalQuery();
var result = ctx.Load(q);

//test Two using EntityQuery
EntityQuery<Doctor> query =
    from c in ctx.GetDoctorsWithPatientsAndHospitalQuery()
    select c;
LoadOperation<Doctor> loadOp = this.ctx.Load(query);
var result2 = loadOp.Entities;

//test Three using only entity and Linq
var result3 = ctx.Doctors.ToList();

奇怪的是,当我想从代码中添加新的实体实例时效果很好。

Doctor newDoctor = new Doctor()
{
    FirstName = firstNameTextBoxNew.Text,
    LastName = lastNameTextBoxNew.Text,
    Hospital_Id = tmp,
    Hospital = tmpH
};

ctx.Doctors.Add(newDoctor);
ctx.SubmitChanges();

谁能指出我在从代码中执行选择时做错了什么?

问候, 丹尼尔·斯科伦斯基

【问题讨论】:

    标签: silverlight silverlight-4.0 wcf-ria-services


    【解决方案1】:

    调用“LoadOperation loadOp = this.ctx.Load(query);” from code 是一个异步操作,因此您基本上是在结果完成之前检查结果。

    如果你想看到结果,你需要给Load()方法提供一个回调,它会在数据加载后执行。

    域服务的数据源处理异步更新,因此在加载操作完成时继续传播更改。

    您的“保存”有效,因为它不会等待结果。之后您将手动检查数据库。不在代码中检查它。

    希望这会有所帮助。

    作为快速检查,试试这个(“result2 =”行上的断点)。您的 loadOp 在此示例中是多余的,但我不想过多地更改您的代码:

    LoadOperation<Doctor> loadOp = this.ctx.Load(query, loadOperation => 
        { 
            var result2 = loadOp.Entities;
        }, null);
    

    **注意:对于那些想要编辑此代码的人......请不要。我想保留提问者代码的味道。 loadOp 和 loadOperation 指向同一个对象,result2 是询问者选择的变量名。*

    【讨论】:

    • 很好,你有一点小错误,里面的“loadOp”应该是“loadOperation”而不是“});”应该是 "}, null);"最后一个问题是:我可以在上下文级别创建查询,还是必须始终通过域服务的方法返回数据。我的意思是我可以运行 async 类似的东西: var result3 = ctx.Doctors.ToList();直接访问实体。
    • @mservidio:我试图保留提问者原始代码的味道。 loadOploadOperation 都指向同一个对象,result2 是提问者的名字。您更改的最终结果 == 0 :)
    • @hightech-magic,明白了,最后一个'null'参数丢失了,这使得代码无效。
    • @mservidio:我知道,第一条评论在 2 年前提到过。我终于把它放进去了。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多