Ich entwickle eine asp.net-Lösung mit Durandal/Brise.Führen Sie eine Auswahl und erweitern Sie in der gleichen Abfrage mit Brise wird nicht unterstützt
Hier ist mein Code alle meine Versendern zu bekommen:
var query = EntityQuery.from('Shippers')
.select('id, name, street, city');
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
Hier ist das zugehörige Modell:
public class Shipper
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Street { get; set; }
public string Number { get; set; }
public City City { get; set; }
}
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public string PostCode { get; set; }
public Country Country { get; set; }
}
Jetzt brauche ich auch Länder einschließen
public class Country
{
[Key]
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
Aber mit die eigentliche Abfrage bekomme ich keine Länder damit.
Ich versuche:
var query = EntityQuery.from('Shippers')
.select('id, name, street, city')
.expand('City.Country');
aber ich habe den Fehler:
use of both 'expand' and 'select' in the same query is not currently supported
Meine Frage: wie die Länder zu bekommen?
UPDATE
Als Jay vorgeschlagen, was wir tun können:
var query = EntityQuery.from('Shippers')
.select('id, name, street, city, city.country')
Nun habe ich ein city_Country
Objekt:
ich nicht Versteh warum wir gehen Diese city_Country
t weil Länderdaten in der Stadt \ Land Objekt bereits vorhanden sind:
Außerdem gibt es mir Problem, weil meine nächste Anweisung versuchen, meine dto in meine Einheit abzubilden und diese city_Country
Objekt existiert nicht in meiner Entität und beim Mapping ist ein Fehler aufgetreten.
Im Folgenden meine Entitätsobjekt sehen und es gibt keine city_Country
Objekt:
Muss ich etwas Besonderes auf meinem Mapping zu tun haben, es zu vermeiden?
Unter meiner Funktion für die Abbildungsoperation ist:
function mapToEntity(entity, dto) {
// entity is an object with observables
// dto is from json
for (var prop in dto) {
if (dto.hasOwnProperty(prop)) {
entity[prop](dto[prop]);
}
}
return entity;
}
Vielen Dank für diese Erklärung. Warum ich die Projektion in meinen Abfragen verwendet habe, liegt daran, dass einige Entitäten eine Menge "schwerer" Eigenschaften wie Bilder enthalten können. Im Falle der Abfrage einer einfachen Liste ist es also besser, nur die notwendigen Eigenschaften oder alle Eigenschaften einer Entität zu erhalten ? – Bronzato
Eine Option besteht einfach darin, die "schweren" Eigenschaften ihrem eigenen EntityType mit einer Eins-zu-Eins-Entsprechung zu dem 'parentType' zuzuordnen, der sie ausschließt. Die andere besteht darin, den Perf/Speicher-Footprint der Verwendung der "vollständigen" Entitäten zu messen und zu sehen, ob sie so teuer sind, wie Sie vermuten. Ich würde mit der einfachsten Architektur beginnen und sie erst dann komplizieren/optimieren, wenn Sie sich selbst beweisen, dass sie nicht performant ist. d.h. nicht zu früh optimieren. –