【问题标题】:Querying data from a WCF data service in Silverlight error在 Silverlight 错误中从 WCF 数据服务查询数据
【发布时间】:2012-02-27 22:23:46
【问题描述】:

我有一个 ADO.NET 模型实体,它反映了一个 oracle 数据库和一个 WCF 服务,它提供对这个 ADO.NET 模型的访问。在我的 WCF 服务代码中,我有以下内容:

config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
//config.SetServiceOperationAccessRule("MyServiceOperation",ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;

我在 silverlight 5 应用程序中添加了对此服务的引用。然后在下面的代码中,我得到一个错误:

Uri WCFUri = new Uri(HtmlPage.Document.DocumentUri, "WcfDataService.svc");
WCF_Service.Entities Database = new WCF_Service.Entities(WCFUri);

var buildings = from building in Config.Database.BUILDINGs
            select building.BLDG_ID;

var buildingsQuery = (DataServiceQuery<string>)buildings;

buildingsQuery.BeginExecute(buildingsResult =>
{
    foreach (string buildingId in buildingsQuery.EndExecute(buildingsResult))
        BuildingsList.Items.Add(new ListItem(buildingId.Trim(), false));
    BuildingListBusyIndicator.IsBusy = false;
}, null);

错误是:

Navigation properties can only be selected from a single resource. Specify a key predicate to restrict the entity set to a single instance.

我不知道问题是什么。提前致谢。

【问题讨论】:

  • 你在哪一行得到这个错误?
  • 我现在不在我的电脑前工作,但我认为是 var building = from building in Config.Database.BUILDINGs select building.BLDG_ID;

标签: c# wcf silverlight web-services ado.net


【解决方案1】:

问题是ADO.NET Data Services不支持投影功能。

您必须选择实体,而不是选择属性。

错误

var buildings = from building in Config.Database.BUILDINGs
            select building.BLDG_ID;

正确

var buildings = from building in Config.Database.BUILDINGs
            select building;

(我知道在你的情况下这个更正毫无意义,但从技术上讲这是真的)

或者你可以使用shell,例如:

var buildings = from building in Config.Database.BUILDINGs
            select new { Id = building.BLDG_ID };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    相关资源
    最近更新 更多