【问题标题】:DataServiceContext & Linq: Select only inherited objectsDataServiceContext & Linq:只选择继承的对象
【发布时间】:2011-08-04 10:14:04
【问题描述】:

我使用 WCF DataSerice 和 EF4.1 代码优先 (C#)。

我有 2 个实体: 1人 2. 继承自Person类的用户

我只想从 DbSet Persons 中获取用户对象。我怎样才能做到这一点? 然后我像这样查询数据服务:

service.CreateQuery<User>("DbPersons").OfType<User>().Execute();

我收到数据服务上下文不支持 OfType 方法的异常。

将 Linq 表达式转换为 URI 时出错:不支持方法“OfType”。

【问题讨论】:

  • 您使用的是什么版本的数据服务。 .NET 4.0 附带的标准版本不支持OfType 运算符。
  • 你好,我试过任何版本(包括CTP2)
  • 你在六月 CTP 上试过了吗? blogs.msdn.com/b/astoriateam/archive/2011/06/30/…
  • 刚刚试了一下。我之前在这里描述过另一个问题stackoverflow.com/questions/6371243/…
  • 现在我得到这个异常'System.InvalidOperationException:客户端和服务之间存在类型不匹配。类型“Crm.Objects.Departament”不是实体类型,但响应负载中的类型表示实体类型。请确保客户端上定义的类型与服务的数据模型匹配,或者更新客户端上的服务引用。在 System.Data.Services.Client.Ato'

标签: c# wcf entity-framework-4.1 wcf-data-services


【解决方案1】:

好的,通过添加服务操作方法解决。 在此处查看解决方案http://msdn.microsoft.com/en-us/library/cc668788.aspx

这是我的代码:

      public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetServiceOperationAccessRule("DbUsers", ServiceOperationRights.AllRead);
    }

    [WebGet]
    public IQueryable<User> DbUsers()
    {
        return CurrentDataSource.DbPersons.OfType<User>();
    }

并在您的客户端应用程序中照常发送请求:

service.CreateQuery<User>("DbUsers").Execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多