Question

Je suis en train de construire un service de données ADO.NET avec beaucoup d'entités et quelques opérations de service. D'un côté, j'ai créé une application Web ASP.NET, dans lequel un ADO.NET Entity Data Model et un service de données ADO.NET sont situés. De l'autre côté, j'ai créé une deuxième application ASP.NET Web qui a un service de référence au service de données.

Les entités sont à venir par très bien, je peux utiliser LINQ pour récupérer les données que je veux:

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

Cela fonctionne. Cependant, la récupération d'informations par le biais des opérations de service me échappe complètement. Les données du code côté service:

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

Quand j'ai ajouté la référence du service à mon projet client, Visual Studio ne capte pas sur toutes les opérations de service. Je sais que je peux y accéder par le biais construits et URIs la méthode BeginExecute soit l'objet DataServiceContext ou les TestEntities objet (dans ce cas), ou quelque chose comme ça, mais ce n'est pas la façon dont je le veux.

Ce que je veux est d'utiliser LINQ pour passer par les données renvoyées de l'opération de service. Est-ce possible? Il devrait être, non?

Était-ce utile?

La solution

choses simples une fois que vous savez.

Juste quelques choses à savoir:

Actuellement DataServiceClientGenerator (qui utilise le EntityClassGenerator) ne marche pas créer des méthodes pour les opérations de service.

En utilisant la méthode CreateQuery le contexte est pas pris en charge pour les opérations de service, actuellement ils travaillent parce qu'il n'y a pas de validation du côté client pour que (vous remarquerez que si vous utilisez CreateQuery le « () » est ajouté à la fin de la méthode de requête comme celui-ci « http: //localhost/service.svc/method ()? paramètre = 2 », vous pouvez utiliser CreateQuery mais il est pas recommandé.

Toutes les opérations de service renvoient des valeurs, mais pour cet exemple, je ne montrer un exemple pour ceux qui le font.

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

Si vous désirez plus d'informations s'il vous plaît ne hésitez pas à poser toutes les questions.

PS .: Sur votre exemple, vous ne avez pas besoin de créer un nouveau contexte de données sur le fonctionnement de votre service (côté serveur) le DataService a déjà une référence instancié lorsque le service est appelé.

Vous pouvez réellement passer outre la création du contexte de données sur le côté service comme celui-ci:

protected override NorthwindEntities CreateDataSource()
{
     return new NorthwindEntities();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top