2012-02-27 55 views
1

我有一个ADO.NET模型实体,它反映了一个Oracle数据库和一个提供对此ADO.NET模型的访问的WCF服务。在我的WCF服务代码中,我有以下内容:从Silverlight中的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. 

我失去了什么问题。提前致谢。

+0

您会在哪一行发生此错误? – 2012-02-27 22:53:44

+0

我现在不在我的电脑上工作,但我认为这是 var buildings =从建筑物的Config.Database.BUILDINGs select building.BLDG_ID; – Justin 2012-02-28 00:33:33

回答

0

问题是,ADO.NET数据服务不支持投影功能。

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

WRONG

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

正确

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

(据我所知,在你的情况下,这个校正毫无意义,但在技术上这是真的)

您可以使用外壳,例如:

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