我想建立一个ADO.NET数据服务,有很多实体和一些服务操作。一方面我创建了一个ASP.NET Web应用程序,其中一个ADO.NET实体数据模型和ADO.NET数据服务的位置。在另一侧上我创建的具有服务引用到数据服务的第二ASP.NET Web应用程序。

实体通过很好的到来,我可以使用LINQ检索我想要的数据:

TestEntities entities = new TestEntities(
            new Uri("http://localhost/service/service.svc"));

var query = from customer in entities.Customers
                    where customer.ID == 1234
                    select customer;

query.ToList();

此工作。然而,通过服务运营检索信息完全逃避我。 数据服务端代码:

public static void InitializeService(IDataServiceConfiguration config) {
    config.SetEntitySetAccessRule("*", EntitySetRights.All);
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
}

[WebInvoke]
public IQueryable<Customer> GetSomeCustomers() {
    TestEntities entities = new TestEntities();
    return from customer in entities.Customers
        where customer.ID > 0 && customer.ID < 20
        select customer;
}

当我加入了服务引用我的客户项目,Visual Studio中没有任何服务运营回升。我知道可以通过构造URI和的任一DataServiceContext对象或对象TestEntities的BeginExecute方法(在这种情况下),或类似的东西访问它们,但是这不是我想要的。

我要的是使用LINQ要经过服务操作返回的数据。 这可能吗?它应该是,正确?

有帮助吗?

解决方案

简单的东西,一旦你知道了。

就在几个事项:

目前DataServiceClientGenerator(它使用EntityClassGenerator)犯规创建用于服务操作的方法。

在上下文中使用的createQuery方法不支持服务业务,目前他们的工作,因为有在该客户端(你会发现,如果你使用的createQuery的“()”被添加到年底没有验证查询方法类似这样的“ HTTP://localhost/service.svc/method()?参数= 2 ”,则可以使用的createQuery但不推荐使用。

不是所有的服务操作返回值,但在这个例子中,我将只显示该做的那些例子。

public partial class NorthwindEntities
{ 
    public IQueryable<Order> OrdersByRegion(int regionId)
    {
     return this.Execute<Orders>(new Uri(string.Format("{0}OrdersByCountry?regionId={1}", this.BaseUri, regionId), UriKind.RelativeOrAbsolute));
    }
}

如果您需要了解更多信息,请随时提出任何问题。

PS:在你的榜样你不需要你的服务操作(服务器端)DataService在早已当服务被称为实例化一个参考创建新的数据环境。

可以实际覆盖创建这样的服务方的数据上下文的:

protected override NorthwindEntities CreateDataSource()
{
     return new NorthwindEntities();
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top