Frage

Ich versuche, einen ADO.NET -Datenservice mit vielen Unternehmen und einigen Servicebetragen zu erstellen. Auf der einen Seite habe ich eine ASP.NET -Webanwendung erstellt, in der sich ein ADO.NET -Entitätsdatenmodell und ein ADO.NET -Datendienst befinden. Auf der anderen Seite habe ich eine zweite ASP.NET -Webanwendung erstellt, die einen Serviceverweis auf den Datendienst hat.

Entitäten kommen sehr gut durch. Ich kann LINQ verwenden, um die von mir gewünschten Daten abzurufen:

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

Das funktioniert. Das Abrufen von Informationen durch Servicevorgänge entgeht mir jedoch vollständig. Datendienst-Seiten-Code:

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

Als ich den Service -Verweis zu meinem Kundenprojekt hinzufügte, hat Visual Studio keine Servicevorgänge abgeholt. Ich weiß, ich kann auf sie über konstruierte URIs und die Beginexecute -Methode des DataServiceContext -Objekts oder des Tests -Objekts (in diesem Fall) oder so ähnlich zugreifen, aber so möchte ich es nicht.

Ich möchte LINQ verwenden, um die zurückgegebenen Daten des Dienstbetriebs zu durchlaufen. Ist das möglich? Es sollte sein, oder?

War es hilfreich?

Lösung

Einfaches Zeug, wenn Sie es wissen.

Nur ein paar Dinge zu wissen:

Derzeit erstellt DataServiceClientGenerator (der den EntityClassGenerator verwendet) keine Methoden für die Servicevorgänge.

Die Verwendung von CreateEquery -Methoden im Kontext wird nicht für Servicevorgänge unterstützt. Derzeit funktionieren sie, da keine Validierung auf der Client -Seite dafür vorliegt (Sie werden feststellen so was "http: //localhost/service.svc/method ()? parameter = 2"Sie können Createquery verwenden, aber es wird nicht empfohlen.

Nicht alle Servicevorgänge geben Werte zurück, aber für dieses Beispiel werde ich nur ein Beispiel für diejenigen zeigen, die dies tun.

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

Wenn Sie weitere Informationen benötigen, können Sie sich gerne Fragen stellen.

PS.: In Ihrem Beispiel müssen Sie keinen neuen Datenkontext für Ihren Servicevorgang (Serverseite) erstellen. Der DataService hat bereits eine Referenz, die so instanziiert ist, dass der Dienst aufgerufen wird.

Sie können das Erstellen des Datenkontexts auf der Serviceseite wie folgt überschreiben:

protected override NorthwindEntities CreateDataSource()
{
     return new NorthwindEntities();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top