【问题标题】:WCF Data Service with EF complex type具有 EF 复杂类型的 WCF 数据服务
【发布时间】:2013-03-26 01:24:51
【问题描述】:

我只是在玩 EF5 和数据服务。决定测试暴露SP。将其映射到 FirmInfo 复杂类型。在这个愚蠢的错误中运行。似乎无法弄清楚。

我为我创建了这个复杂类型的 .tt 模板

public partial class FirmInfo
{
    public int FirmID { get; set; }
    public string Name { get; set; }
}

我添加了这个以将其公开给 MyDataService.svc.cs 类:

[WebGet]
public IQueryable<FirmInfo> pSPTest(int id)
{
    return CurrentDataSource.pSPTest(id).AsQueryable();
}

我可以在浏览器中看到它:

- <pSPTest xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
- <element m:type="DB.FirmInfo">
    <FirmID m:type="Edm.Int32">1</FirmID> 
    <Name>Firm Name</Name> 
  </element>
  </pSPTest>

但是当通过 c# 客户端应用程序使用时,我不断收到此错误: 类型“Client.ServiceReference.FirmInfo”上不存在属性“元素”。确保只使用类型定义的属性名称。

任何帮助表示赞赏

【问题讨论】:

    标签: entity-framework-5 wcf-data-services


    【解决方案1】:

    您如何使用 C# 客户端应用程序使用结果?如果您使用的是 WCF 数据服务客户端,您应该在 DataServiceContext 上调用 Execute&lt;T&gt;()

    有关如何使用 WC 数据服务客户端调用服务操作的指导,请查看此文档:http://msdn.microsoft.com/en-us/library/hh230677.aspx

    【讨论】:

    • 是的,我正在使用 context.Execute 但经过一些额外的研究后,我注意到 OData 客户端库不支持复杂类型。即使是最新的 5.3.0.0 也给了我以下错误:如果类型 'Client.ServiceReference.FirmInfo' 不是集合,则无法实现基元或复合体的集合。
    • 我认为问题的根源在于 WCF 数据服务没有返回 atom 格式的复杂类型,因此客户端代码无法正确使用它。
    • 嗯,当我将 Execute 方法的参数 singleResult 更改为 false 时,看起来我能够让它工作: List FirmsInfo = context.Execute(new Uri("/ pSPTest", UriKind.Relative), "GET", false).ToList();
    • 罗曼,回答你自己的问题。因为你是对的。我和你在同一时间遇到了同样的问题。它奏效了。我唯一需要做的就是下载最新版本的 Microsoft.Data.OData
    【解决方案2】:

    您也可以通过将操作结果声明为您期望的集合类型来实现这一点,就像这样。

    var query = context.CreateQuery<ObservableCollection<wsAccountView.organisation>>("GetOrganisationsByUserName").AddQueryOption("UserName", @"'SFN\AO'");
    var Organisations = query.ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      相关资源
      最近更新 更多