Domanda

Sto cercando di costruire un servizio di dati ADO.NET con un sacco di enti e alcune operazioni di servizio. Da una parte ho creato un'applicazione Web ASP.NET, in cui si trovano un Entity Data Model ADO.NET e un servizio dati ADO.NET. D'altra parte ho creato una seconda applicazione Web ASP.NET che dispone di un servizio di riferimento al servizio dati.

Le entità stanno arrivando attraverso molto bene, posso usare LINQ per recuperare i dati che voglio:

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();

Questo funziona. Tuttavia, il recupero delle informazioni attraverso Service Operations mi sfugge completamente. Dati Codice di servizio-side:

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;
}

Quando ho aggiunto il riferimento servizio al mio progetto client, Visual Studio non salire su eventuali operazioni di manutenzione. So che io possa accedere attraverso URI costruiti e il metodo BeginExecute di entrambi dell'oggetto DataServiceContext oi TestEntities oggetto (in questo caso), o qualcosa di simile, ma non è come lo voglio.

Quello che voglio è quello di utilizzare LINQ per passare attraverso i dati restituiti del Service Operation. È possibile? Dovrebbe essere, giusto?

È stato utile?

Soluzione

Roba semplice una volta che sai.

A pochi cose da sapere:

Al momento DataServiceClientGenerator (che utilizza l'EntityClassGenerator) doesnt creare metodi per le operazioni di servizio.

Usando il metodo createQuery dal contesto non è supportato per le operazioni di servizio, attualmente funzionano perché non v'è alcuna convalida sul lato client per questo (si noterà che se si utilizza createQuery il "()" viene aggiunto alla fine del il metodo di query come questo " http: //localhost/service.svc/method ()? parametro = 2 ", è possibile utilizzare createQuery ma non è consigliato.

Non tutte le operazioni di servizio valori di ritorno, ma per questo esempio vediamo solo un esempio per quelli che lo fanno.

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));
    }
}

Se avete bisogno di ulteriori informazioni non esitate a fare domande.

PS .: Il tuo esempio non avete è necessario creare un nuovo contesto dati sul funzionamento del servizio (lato server) il DataService ha già un riferimento istanziato quando il servizio si chiama.

Si può effettivamente ignorare il creare il contesto dei dati sul lato servizio come questo:

protected override NorthwindEntities CreateDataSource()
{
     return new NorthwindEntities();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top